Shell腳本監控Linux某個后台進程,當進程死掉后重新啟動服務,以httpd為例


Shell腳本如下:

vim monitor.sh

#!/bin/bash while true # 無限循環 flag=`ps -aux |grep "httpd" |grep -v "grep" |wc -l` do
        if [[ $flag -eq 0 ]] # 判斷進程數如果等於0,則啟動httpd then `systemctl start httpd` # 啟動httpd echo `date` - "Apache restart" >> running.log # 將重啟時間寫入自定義的日志文件 else
                echo "Apache is running..." >> /dev/null
        fi
        sleep 3s # 延遲3秒后進入下次循環 done

運行腳本:bash monitor.sh &

命令末尾的 & 號,意思是將這個任務放到后台去執行。

那么如何停止腳本運行呢?

(1)首先查找運行腳本的進程PID號:

ps -aux |grep "bash monitor.sh"

(2)終止腳本進程:

kill -9 進程PID號

 

對腳本做一些說明:

ps -aux | grep    # 查找進程

參數:-aux 意思是顯示所有包含其他使用者的進程。

ps -aux | grep "process_name"

若只執行這條命令,會導致出現一個 grep 進程,也就是說若只用上面的命令,會永遠得到至少一個進程(grep進程),所以還需要用下面的命令,排除 grep 本身這個進程:

grep -v "grep"

最后再用 wc -l 命令統計進程數。

if 判斷如果獲得的進程數等於0,則證明 httpd 服務沒有運行,執行啟動命令。

 

sleep命令可以用來將目前動作延遲一段時間

sleep 1      延遲1秒

sleep 1s    延遲1秒

sleep 1m   延遲1分鍾

sleep 1h    延遲1小時

sleep 1d    延遲1天

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM