一、問(wèn)題描述:
監(jiān)控指定程序是否運(yùn)行,如果程序沒(méi)有運(yùn)行,那么啟動(dòng)程序。
二、解決思路:
<1>、我們判斷一個(gè)程序是否運(yùn)行,可以通過(guò)查看該程序的進(jìn)程信息來(lái)判斷。
例: 判斷程序 01FirstScript.sh 是否在運(yùn)行
命令:ps -ef | grep 01FirstScript.sh | grep -v grep
結(jié)果分析: 如果命令執(zhí)行之后有輸出,即輸出進(jìn)程信息。則說(shuō)明程序正在運(yùn)行
如果執(zhí)行之后沒(méi)有輸出,則說(shuō)明程序沒(méi)有運(yùn)行
<2>、如何監(jiān)控指定的程序?
我們可以將指定程序的名字作為監(jiān)控程序的參數(shù)傳遞進(jìn)去,在內(nèi)部實(shí)現(xiàn)時(shí),通過(guò)死循環(huán)來(lái)不斷監(jiān)控
<3>、如果程序未運(yùn)行,如何啟動(dòng)程序?
在判斷程序?yàn)檫\(yùn)行時(shí),如果指定程序名是監(jiān)控程序的第一個(gè)參數(shù)??梢酝ㄟ^(guò)下面命令啟動(dòng)指定程序
sh $1
三、腳本代碼實(shí)現(xiàn):
- #!/bin/bash
- #進(jìn)程監(jiān)控腳本
- #功能需求: 監(jiān)控程序是否運(yùn)行,如果程序沒(méi)有運(yùn)行,那么啟動(dòng)程序。
- while [ true ]
- do
- pro=$(ps -ef | grep "$1" | grep -v grep | grep -v "$0")
- #過(guò)濾出目標(biāo)進(jìn)程信息,如果pro為空串說(shuō)明目標(biāo)進(jìn)程未運(yùn)行
- #反向過(guò)濾掉grep進(jìn)程 和 本進(jìn)程信息, 因?yàn)檫@兩個(gè)進(jìn)程信息中包含目標(biāo)進(jìn)程的名字
- if [ -z "$pro" ]
- then
- echo "程序未啟動(dòng),重新啟動(dòng)程序"
- sh $1 #重新啟動(dòng)指定程序
- else
- echo "程序正在運(yùn)行..."
- fi
- sleep 0.5
- done
聯(lián)系客服