天天看點

shell腳本守護node-red程序,讓程式一直運作

作者:94版三國演義

真後悔沒有早點用shell腳本,我才花了2天搞完了shell菜鳥教程,解決了我一個陳年舊病

因為我一直用node-red,但是有時候node-red會莫名其妙的掉線了,發現的時候已經丢失了很多資料了。

1、了解指令 p2 -ef | grep "**" | grep -v grep

這個是根據名稱查找程序,并且過濾掉grep自己的程序

shell腳本守護node-red程式,讓程式一直運作

2、開始寫腳本

#!/bin/bash
while true :
do
ps -ef | grep "node-red" | grep -v grep
if  [ "$?" -ne 0 ]
then  pm2 start ~/Desktop/nodejs/bin/node-red -- -v
else echo "common--->"
fi
sleep 10
done           

while true :

do

語句A

done

這個是一個死循環,會一直執行語句

這裡的語句A是什麼呢?

執行ps -ef | grep "node-red" | grep -v grep

擷取結果"$?" 的長度

-ne是不等于的意思

我們可以做一個測試,

#!/bin/bash
ps -ef | grep "node-red" | grep -v grep
echo "$?"           

當node-red正常運作的時候,看看ps -ef | grep "node-red" | grep -v grep傳回的是什麼?

shell腳本守護node-red程式,讓程式一直運作
shell腳本守護node-red程式,讓程式一直運作

當node-red異常運作的時候,看看ps -ef | grep "node-red" | grep -v grep傳回的是什麼?

shell腳本守護node-red程式,讓程式一直運作
shell腳本守護node-red程式,讓程式一直運作

根據以上的測試,我們發現,當傳回的不為0的時候,就說明程序異常;

死循環的話,感覺太耗性能了,也沒有必要

可以每次執行結束以後,休眠10s sleep 10

以下腳本如下

#!/bin/bash
while true :
do
ps -ef | grep "node-red" | grep -v grep
echo "$?"
if  [ "$?" -ne 0 ]
then  pm2 start ~/Desktop/nodejs/bin/node-red -- -v
else echo "common--->"
fi
sleep 10
done
           

測試腳本是否有效

1、node-red的初始狀态是關閉

2、啟用腳本 ./pm2 start 發現啟動了node-red

shell腳本守護node-red程式,讓程式一直運作

3、現在檢視node-red的啟動狀态

pm2 list

node-red啟動了

因為每次循環間隔10s,若未啟用,則啟用,若啟用了,則列印common--->

我們可以看到下圖左邊都是common--->

shell腳本守護node-red程式,讓程式一直運作

4、我關閉node-red,看看腳本會不會啟用node-red

shell腳本守護node-red程式,讓程式一直運作

幾秒以後啟用了,哈哈哈哈哈,完美

shell腳本守護node-red程式,讓程式一直運作