如何監視一個程序,崩潰掛掉後自動重啟
阿新 • • 發佈:2019-02-01
如何保證服務一直執行?如何保證即使服務掛掉了也能自動重啟?在寫服務程式時經常會碰到這樣的問題。
shell指令碼
下面的shell通過一個while-do迴圈,用ps -ef|grep 檢查loader程序是否正在執行,如果沒有執行,則啟動,這樣就保證了崩潰掛掉的程序重新被及時啟動。
必須注意兩點:
1、ps |grep 一個程序時必須加上其路勁,否則容易grep到錯誤的結果;
2、必須用 -v 從結果中去除grep命令自身,否則結果非空。
#!/bin/shecho "Current DIR is " $PWD
while [ 1 ]
do
propserverpid=`ps -ef|grep propserver|grep 6668|grep -v grep|awk '{print $2}'`
if [ "$propserverpid" ]
then
echo "propserver is running,pid is " $propserverpid
kill -9 $propserverpid
else
echo "propserver is down ,now starting ..."
nohup $PWD/propserver -c config.ini -p 6668 &
sleep 5
done
如果啟動此shell時發現程序已經存在,說明以別的方式啟動了程序而不是此shell,那麼它會持續提醒找到程序,解決辦法是,要麼只用此shell啟動服務,要麼一經發現以其他方式啟動的服務即kill掉,上面的語句就是這麼幹的:
kill -9 $pidof $PWD/loader另外執行指令碼是老是提示這個錯誤:
: bad interpreter: 沒有那個檔案或目錄
查了下解釋如下
這種情況常見於通過windows平臺傳遞shell指令碼,導致bash編碼出錯,但這次是兩臺linux伺服器通過ftp來傳遞的,應該不會出現這種問題,算了不管~問題出現了就先解決!
解決方法:
廢話少說,直奔主題!
1.在新伺服器中新建shell指令碼檔案。
# vi jobak
2.將原來伺服器上的shell指令碼的內容複製到剛剛建立的指令碼檔案,儲存退出。
3.修改shell指令碼的執行許可權屬性等等,這個自由發揮