Linux下使用Shell腳本實(shí)現(xiàn)進(jìn)程監(jiān)控的流程
本文介紹一種在Linux系統(tǒng)下為實(shí)現(xiàn)某些關(guān)鍵進(jìn)程狀態(tài)的實(shí)時(shí)監(jiān)控而使用shell腳本的編寫(xiě)方法。在這里主要通過(guò)監(jiān)控某些進(jìn)程是否退出作為判斷依據(jù),如果某個(gè)進(jìn)程退出了,則進(jìn)行對(duì)應(yīng)的恢復(fù)處理,如重新拉起相關(guān)的進(jìn)程等。
下面介紹該腳本的實(shí)現(xiàn)流程。
首先生成一個(gè)名為”process_check.sh”的腳本,腳本內(nèi)容如下:
#!/bin/bash
#該函數(shù)檢查關(guān)鍵進(jìn)程的狀態(tài),最終返回進(jìn)程的個(gè)數(shù)。
checkprocess()
{
# echo "checkprocess...$1"
if [ "$1" = "" ];
then
return 1
fi
process_num=`ps -ef|grep "$1" |grep -v "grep" |wc -l`
# echo "checkprocess num=$process_num"
return $process_num
}
#進(jìn)程如有退出,則記錄相關(guān)的信息,并做相關(guān)的處理
recordinfo()
{
# echo "check $1"
if [ "$1" = "" ];
then
return
fi
#打印進(jìn)程退出的時(shí)間
date "+++++++++++++++++++ +%Y-%m-%d %H:%M:%S '$1' exit! +++++++++++++++++++"
#重新拉起這個(gè)進(jìn)程
"$1" &
echo "restart $1"
}
#檢查進(jìn)程的狀態(tài)
check()
{
echo "####check $1"
if [ "$1" = "" ];
then
return
fi
checkprocess "$1"
check_result=$?
#如果該進(jìn)程的個(gè)數(shù)為0,則說(shuō)明該進(jìn)程已經(jīng)退出
if [ $check_result -eq 0 ];
then
recordinfo "$1"
# exit
fi
}
#循環(huán)檢測(cè)
while [ 1 ] ; do
#關(guān)鍵進(jìn)程列表,多個(gè)進(jìn)程以逗號(hào)分隔,這里以兩個(gè)進(jìn)程為例子。
process_name="./test1,./test2"
OLD_IFS="$IFS"
IFS=","
arr=($process_name)
IFS="$OLD_IFS"
for s in ${arr[@]}
do
check "$s"
done
sleep 3
# echo "check loop..."
done測(cè)試驗(yàn)證
這里寫(xiě)一個(gè)簡(jiǎn)單的測(cè)試程序,代碼如下:
void main()
{
while(1) {
sleep(3);
}
}編譯后生成兩個(gè)名為“test1”,“test2”的可執(zhí)行文件。
為了方便測(cè)試,可以將”process_check.sh”,”test1”,”test2”放置于同一個(gè)目錄下。
1.運(yùn)行”process_check.sh”,如下所示:

從上圖可知,”test1”,”test2”剛開(kāi)始并未被拉起,運(yùn)行”process_check.sh”之后,檢測(cè)出”test1”,”test2”不存在,則觸發(fā)拉起的機(jī)制,最終”test1”,”test2”被啟動(dòng)了。
2.運(yùn)行過(guò)程中kill掉某一個(gè)進(jìn)程,驗(yàn)證”process_check.sh”是否有將該進(jìn)程拉起。

由下圖可知,被kill的進(jìn)程最終又被拉起了。

至此,該腳本的功能已被驗(yàn)證完畢。
結(jié)語(yǔ):在 Linux 平臺(tái)下,shell 腳本監(jiān)控是一個(gè)非常簡(jiǎn)單、方便的工具,它可以有效的對(duì)服務(wù)器、進(jìn)程進(jìn)行監(jiān)控,對(duì)系統(tǒng)開(kāi)發(fā)以及進(jìn)程維護(hù)人員非常有幫助。
到此這篇關(guān)于Linux下使用Shell腳本實(shí)現(xiàn)進(jìn)程監(jiān)控的文章就介紹到這了,更多相關(guān)Shell腳本進(jìn)程監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Debian 終端Shell命令行長(zhǎng)路徑改為短路徑的步驟
要將Debian終端Shell的命令行長(zhǎng)路徑更改為較短路徑,可以按照以下步驟進(jìn)行操作,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2023-12-12
Linux oracle數(shù)據(jù)庫(kù)自動(dòng)備份自動(dòng)壓縮腳本代碼
這篇文章主要介紹了Linux oracle數(shù)據(jù)庫(kù)備份完成后可以自動(dòng)壓縮腳本代碼,大家參考使用2013-12-12
解決linux下openoffice word文件轉(zhuǎn)PDF中文亂碼的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決linux下openoffice word文件轉(zhuǎn)PDF中文亂碼的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Shell腳本實(shí)現(xiàn)硬盤(pán)空間和表空間的使用情況統(tǒng)計(jì)并郵件通知
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)硬盤(pán)空間和表空間的使用情況統(tǒng)計(jì)并郵件通知,其中表空間是指oracle數(shù)據(jù)庫(kù)里的表空間,需要的朋友可以參考下2014-12-12
Linux下shell基本命令之grep用法及示例小結(jié)
grep是Unix/Linux系統(tǒng)中用于文本搜索的強(qiáng)大工具,它可以忽略大小寫(xiě)、顯示行號(hào)、反向選擇、遞歸搜索目錄等,本文就來(lái)介紹一下,感興趣的可以了解一下2024-12-12
Linux 壓縮某個(gè)文件夾的實(shí)現(xiàn)方法
這篇文章主要介紹了Linux 壓縮某個(gè)文件夾的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
快速入門(mén)Shell腳本之條件判斷語(yǔ)句與循環(huán)
這篇文章主要介紹了快速入門(mén)Shell腳本之條件判斷語(yǔ)句與循環(huán),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

