1. 程式人生 > >如何監視一個程序,崩潰掛掉後自動重啟

如何監視一個程序,崩潰掛掉後自動重啟

如何保證服務一直執行?如何保證即使服務掛掉了也能自動重啟?在寫服務程式時經常會碰到這樣的問題。 

shell指令碼

下面的shell通過一個while-do迴圈,用ps -ef|grep 檢查loader程序是否正在執行,如果沒有執行,則啟動,這樣就保證了崩潰掛掉的程序重新被及時啟動。

必須注意兩點:

1、ps |grep 一個程序時必須加上其路勁,否則容易grep到錯誤的結果;

2、必須用 -v 從結果中去除grep命令自身,否則結果非空。

#!/bin/sh
echo "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 &
 fi
 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指令碼的執行許可權屬性等等,這個自由發揮