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天