日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Linux下使用Shell腳本實(shí)現(xiàn)進(jìn)程監(jiān)控的流程_linux shell

作者:赤露水 ? 更新時(shí)間: 2023-06-19 編程語(yǔ)言

本文介紹一種在Linux系統(tǒng)下為實(shí)現(xiàn)某些關(guān)鍵進(jìn)程狀態(tài)的實(shí)時(shí)監(jiān)控而使用shell腳本的編寫方法。在這里主要通過(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)證

這里寫一個(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ù)人員非常有幫助。

原文鏈接:https://blog.csdn.net/zhongcaogen/article/details/129218446

  • 上一篇:沒(méi)有了
  • 下一篇:沒(méi)有了
欄目分類
最近更新