一江春水向東流

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

            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
          主站蜘蛛池模板: 西丰县| 云梦县| 兴仁县| 酒泉市| 遂溪县| 林芝县| 札达县| 马山县| 宁乡县| 安庆市| 昔阳县| 铜川市| 建昌县| 贵州省| 鄂伦春自治旗| 清涧县| 星子县| 台中市| 平舆县| 泾源县| 托克托县| 名山县| 大厂| 赞皇县| 绥中县| 砀山县| 江阴市| 罗山县| 澄迈县| 壤塘县| 佛冈县| 仙桃市| 曲水县| 乐至县| 桂东县| 昌黎县| 周至县| 句容市| 七台河市| 通州区| 黎平县|