天天看點

linux定時重新開機程序腳本,linux下通過腳本實作自動重新開機程式

假定需要實作重新開機的程式名為 test ,我們這裡通過判斷程序數目來判斷程式是否正常。

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

grep -v "grep":作用:在結果中搜尋除 grep之外的部分

-v, --invert-match

Invert the sense of matching, to select non-matching lines.  (-v is specified by POSIX.)

代碼如下:

腳本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 $1

CheckQQ_RET=$?

if [ $CheckQQ_RET -eq 1 ];

then

# 殺死所有test程序,可換任意你需要執行的操作

killall -9 $1

exec ./$1 &

fi

sleep 1

done

腳本start:

腳本start:

加入limit coredumpsize 102400,設定core file的大小,一旦程式Core Dump,有迹可尋。在該腳本中背景執行check腳本,可以省去很多麻煩,

PS:對這個腳本的功能 表示懷疑 可能達不到實際需要的效果

經過實際驗證後的可行的腳本如下:

#!/bin/sh

#declare -i g_processID=0

help(){

echo "Usage: $0 "

exit 0

}

# 參數範圍檢查

if [ "$#" != 1 ];

then

help

fi

#檢查程序執行個體是否已經存在

while [ 1 ]; do

DTTERM=`pgrep ${1}`

if [ -n "$DTTERM" ]

then

echo "process exit and date is: `date`"

#正确輸入資訊到日志檔案

else

echo "restart process: $1 and date is: `date`"

exec ./${1} &

fi

#監控時間間隔

sleep 1

done

附grep使用方法:

中的grep指令可以在文本中搜尋指定的字元串,

摘要

舉例介紹GREP的各種搜尋方式,檔案名,段落,正則比對等多種方式的搜尋.

假設您正在‘/usr/src/linux/Documentation’目錄下搜尋帶字元串‘magic’的檔案:

$ grep magic /usr/src//Documentation/*

sysrq.txt:* How do I enable the magic SysRQ key?

sysrq.txt:* How do I use the magic SysRQ key?

其中檔案‘sysrp.txt’包含該字元串,讨論的是 SysRQ 的功能。

預設情況下,‘grep’隻搜尋目前目錄。如果此目錄下有許多子目錄,‘grep’會以如下形式列出:

grep: sound: Is a directory

這可能會使‘’的輸出難于閱讀。這裡有兩種解決的辦法:

明确要求搜尋子目錄:grep -r

或忽略子目錄:grep -d skip

當然,如果預料到有許多輸出,您可以通過 管道 将其轉到‘less’上閱讀:

$ grep magic /usr/src/linux/Documentation/* | less

這樣,您就可以更友善地閱讀。

有一點要注意,您必需提供一個檔案過濾方式(搜尋全部檔案的話用 *)。如果您忘了,‘grep’會一直等着,直到該程式被中斷。如果您遇到了這樣的情況,按 ,然後再試。

下面是一些有意思的指令行參數:

grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫,

grep -l pattern files :隻列出比對的檔案名,

grep -L pattern files :列出不比對的檔案名,

grep -w pattern files :隻比對整個單詞,而不是字元串的一部分(如比對‘magic’,而不是‘magical’),

grep -C number pattern files :比對的上下文分别顯示[number]行,

grep pattern1 | pattern2 files :顯示比對 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :顯示既比對 pattern1 又比對 pattern2 的行。

這裡還有些用于搜尋的特殊符号:

\< 和 \> 分别标注單詞的開始與結尾。

例如:

grep man * 會比對 ‘Batman’、‘manic’、‘man’等,

grep ‘\grep ‘\’ 隻比對‘man’,而不是‘Batman’或‘manic’等其他的字元串。

‘^’:指比對的字元串在行首,

‘$’:指比對的字元串在行尾,