linux下通過腳本實現自動重啟程序的方法


無論什么程序都不可能完美無缺,理論上,任何程序都有 Core Dump 的一天,正式運營的程序,尤其是服務器程序,一旦 Core Dump ,后果不堪設想,有過服務器開發經驗的朋友,一定都經歷過深夜美夢中,被電話驚醒的慘痛經歷,手忙腳亂把服務器重新啟動,第二天上班還要被老板一頓狠批。 所以,程序發生錯誤時自動重啟變得很重要。這里集中討論 linux 實現自動重啟程序的方法。

  linux 下實現程序的自動重啟有很多方法,這里我們介紹的是通過自己寫腳本來實現。

  自動重啟腳本,假定需要實現重啟的程序名為 test ,我們這里通過判斷進程數目來判斷程序是否正常。

  ps -ef | grep "$1" | grep -v "grep" | wc –l 是獲取 $1 (本例中為 test )的進程數,腳本根據進程數來決定下一步的操作。通過一個死循環,每隔 1 秒檢查一次系統中的指定程序的進程數。

代碼如下:

#!/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 "CheckQQ_RET"
             if [ $CheckQQ_RET != 4 ];
           then
        # 殺死所有test進程,可換任意你需要執行的操作 
           killall -9 test 
           exec ./test &  
        fi
           sleep 1
        done

  腳本start:
  加入limit coredumpsize 102400,設置core file的大小,一旦程序Core Dump,有跡可尋。在該腳本中后台執行check腳本,可以省去很多麻煩,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM