linux脚本重启进程,linux下通过脚本实现自动重启程序
假定需要實(shí)現(xiàn)重啟的程序名為 test ,我們這里通過判斷進(jìn)程數(shù)目來判斷程序是否正常。
ps -ef | grep "$1" | grep -v "grep" | wc –l 是獲取 $1 (本例中為 test )的進(jìn)程數(shù),腳本根據(jù)進(jìn)程數(shù)來決定下一步的操作。通過一個(gè)死循環(huán),每隔 1 秒檢查一次系統(tǒng)中的指定程序的進(jìn)程數(shù)。
grep -v "grep":作用:在結(jié)果中搜索除 grep之外的部分
-v, --invert-match
Invert the sense of matching, to select non-matching lines.? (-v is specified by POSIX.)
代碼如下:
腳本check
#!/bin/sh
#------------------------------------------------------------------------------
# 函數(shù): CheckProcess
# 功能: 檢查一個(gè)進(jìn)程是否存在
# 參數(shù): $1 --- 要檢查的進(jìn)程名稱
# 返回: 如果存在返回0, 否則返回1.
#------------------------------------------------------------------------------
CheckProcess(){
# 檢查輸入的參數(shù)是否有效
if [ "$1" = "" ];
then
return 1
fi
#$PROCESS_NUM獲取指定進(jìn)程名的數(shù)目,為1返回0,表示正常,不為1返回1,表示有錯(cuò)誤,需要重新啟動(dòng)
PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l`
if [ $PROCESS_NUM -eq 1 ];
then
return 0
else
return 1
fi
}
# 檢查test實(shí)例是否已經(jīng)存在
while [ 1 ] ; do
CheckProcess $1
CheckQQ_RET=$?
if [ $CheckQQ_RET -eq 1 ];
then
# 殺死所有test進(jìn)程,可換任意你需要執(zhí)行的操作
killall -9 $1
exec ./$1 &
fi
sleep 1
done
腳本start:
腳本start:
加入limit coredumpsize 102400,設(shè)置core file的大小,一旦程序Core Dump,有跡可尋。在該腳本中后臺(tái)執(zhí)行check腳本,可以省去很多麻煩,
PS:對(duì)這個(gè)腳本的功能 表示懷疑 可能達(dá)不到實(shí)際需要的效果
經(jīng)過實(shí)際驗(yàn)證后的可行的腳本如下:
#!/bin/sh
#declare -i g_processID=0
help(){
echo "Usage: $0 "
exit 0
}
# 參數(shù)范圍檢查
if [ "$#" != 1 ];
then
help
fi
#檢查進(jìn)程實(shí)例是否已經(jīng)存在
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
#監(jiān)控時(shí)間間隔
sleep 1
done
附grep使用方法:
中的grep命令可以在文本中搜索指定的字符串,
摘要
舉例介紹GREP的各種搜索方式,文件名,段落,正則匹配等多種方式的搜索.
假設(shè)您正在‘/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 的功能。
默認(rèn)情況下,‘grep’只搜索當(dāng)前目錄。如果此目錄下有許多子目錄,‘grep’會(huì)以如下形式列出:
grep: sound: Is a directory
這可能會(huì)使‘’的輸出難于閱讀。這里有兩種解決的辦法:
明確要求搜索子目錄:grep -r
或忽略子目錄:grep -d skip
當(dāng)然,如果預(yù)料到有許多輸出,您可以通過 管道 將其轉(zhuǎn)到‘less’上閱讀:
$ grep magic /usr/src/linux/Documentation/* | less
這樣,您就可以更方便地閱讀。
有一點(diǎn)要注意,您必需提供一個(gè)文件過濾方式(搜索全部文件的話用 *)。如果您忘了,‘grep’會(huì)一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按 ,然后再試。
下面是一些有意思的命令行參數(shù):
grep -i pattern files :不區(qū)分大小寫地搜索。默認(rèn)情況區(qū)分大小寫,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個(gè)單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
這里還有些用于搜索的特殊符號(hào):
\< 和 \> 分別標(biāo)注單詞的開始與結(jié)尾。
例如:
grep man * 會(huì)匹配 ‘Batman’、‘manic’、‘man’等,
grep ‘\grep ‘\’ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行尾,
總結(jié)
以上是生活随笔為你收集整理的linux脚本重启进程,linux下通过脚本实现自动重启程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 爱志远这个网名,谐音也可以?
 - 下一篇: 邵氏女宝中间占显字名字?