linux下通過指令碼實現自動重啟程式

來源:互聯網
上載者:User

無論什麼程式都不可能完美無缺,理論上,任何程式都有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 1done

指令碼start:
加入limit coredumpsize 102400,設定core file的大小,一旦程式Core Dump,有跡可尋。在該指令碼中後台執行check指令碼,可以省去很多麻煩,

#!/bin/cshlimit coredumpsize 102400
./check &

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.