一江春水向東流

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

            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 閱讀(869) 評論(0)  編輯  收藏 所屬分類: LINUX配置,shell
          主站蜘蛛池模板: 呼和浩特市| 芒康县| 察隅县| 通州市| 潼南县| 灵武市| 七台河市| 邛崃市| 黎平县| 石渠县| 安宁市| 彝良县| 金乡县| 泗洪县| 政和县| 海淀区| 甘洛县| 牡丹江市| 澳门| 来安县| 德兴市| 东乡| 邵东县| 兴化市| 大邑县| 太保市| 德安县| 仁怀市| 五大连池市| 富宁县| 任丘市| 仙居县| 韶关市| 博乐市| 滁州市| 海阳市| 郓城县| 高安市| 安丘市| 乌拉特前旗| 三台县|