無論什么程序都不可能完美無缺,理論上,任何程序都有
Core Dump
的一天,正式運營的程序,尤其是服務器程序,一旦
Core Dump
,后果不堪設想,有過服務器開發經驗的朋友,一定都經歷過深夜美夢中,被電話驚醒的慘痛經歷,手忙腳亂把服務器重新啟動,第二天上班還要被老板一頓狠批。所以,程序發生錯誤時自動重啟變得很重要。這里集中討論
linux
實現自動重啟程序的方法。
????linux
下實現程序的自動重啟有很多方法,這里我們介紹的是通過自己寫腳本來實現,
????自動重啟腳本
假定需要實現重啟的程序名為
test
,我們這里通過判斷進程數目來判斷程序是否正常。
ps -ef | grep "$1" | grep -v "grep" | wc –l
是獲取
$1
(本例中為
test
)的進程數,腳本根據進程數來決定下一步的操作。通過一個死循環,每隔
1
秒檢查一次系統中的指定程序的進程數。
代碼如下:
????腳本check
#!/bin/sh
#------------------------------------------------------------------------------ # 函數: CheckProcess # 功能: 檢查一個進程是否存在 # 參數: $1 --- 要檢查的進程名稱 # 返回: 如果存在返回0, 否則返回1. #------------------------------------------------------------------------------ CheckProcess() { ? # 檢查輸入的參數是否有效 ? if [ "$1" = "" ]; ? then ??? return 1 ? fi ? ? #$PROCESS_NUM獲取指定進程名的數目,為1返回0,表示正常,不為1返回1,表示有錯誤,需要重新啟動 ? PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` ? if [ $PROCESS_NUM -eq 1 ]; ? then ??? return 0 ? else ??? return 1 ? fi }
# 檢查test實例是否已經存在 while [ 1 ] ; do ?CheckProcess "test" ?CheckQQ_RET=$? ?if [ $CheckQQ_RET -eq 1 ]; ?then
# 殺死所有test進程,可換任意你需要執行的操作
??killall -9 test ??exec ./test &?? ?fi ?sleep 1 done
|
????腳本start:
????加入limit coredumpsize 102400,設置core file的大小,一旦程序Core Dump,有跡可尋。在該腳本中后臺執行check腳本,可以省去很多麻煩,
#!/bin/csh limit coredumpsize 102400
./check &
|
?