一江春水向東流

          做一個有思想的人,期待與每一位熱愛思考的人交流,您的關注是對我最大的支持。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks
          無論什么程序都不可能完美無缺,理論上,任何程序都有 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 &
          																


          ?

          posted on 2008-04-05 13:35 allic 閱讀(863) 評論(0)  編輯  收藏 所屬分類: LINUX配置,shell
          主站蜘蛛池模板: 临漳县| 怀仁县| 醴陵市| 历史| 江油市| 青铜峡市| 阿拉善右旗| 灵山县| 共和县| 鄢陵县| 齐河县| 无极县| 泾阳县| 柘城县| 通榆县| 镇雄县| 青田县| 瓦房店市| 榕江县| 来安县| 开平市| 张北县| 湖州市| 三穗县| 囊谦县| 长海县| 金山区| 修武县| 瑞丽市| 玛曲县| 镇原县| 山阴县| 河曲县| 安福县| 五大连池市| 禄丰县| 鹿邑县| 灌南县| 安西县| 邹城市| 克什克腾旗|