1、新建腳本check_nginx.sh
#!/bin/bash
APP_NAME="nginx: master"
BIN_PATH="/usr/local/nginx/sbin"
#檢測方法
checkStatus(){
pid=$(ps -ef |grep "$APP_NAME" |grep -v "grep" |awk '{print $2}');
#datetime=`date +%Y-%m-%d,%H:%m:%s`
datetime="`date`"
if [ -z "${pid}" ]; then
echo "$datetime ---- 開始啓動服務$APP_NAME"
cd $BIN_PATH
./nginx
else
echo "$datetime ---- 項目$APP_NAME已經啓動,進程pid是${pid}!"
fi
}
checkStatus
腳本授權:
chmod a+x /usr/local/check/check_nginx.sh
這裏注意一點:
APP_NAME=“nginx: master”
APP_NAME定義的一定要準確一點,保證獲取到唯一的pid,而不是獲取到相關的日誌監控進程或者子work進程的pid
這是由於grep匹配的問題,需要grep進行精準匹配,即"grep -w"
#!/bin/bash
NUM=$(ps -ef|grep -w main|grep -v grep|wc -l)
if [ $NUM -eq 0 ];then
echo "Oh!My God! It's broken! main is stoped!"
else
echo "Don't worry! main is running!"
fi
2、建立定時任務
crontab -e
#新建定時任務,每分鐘檢測一次Nginx的狀態,如果Nginx沒有啓動,就執行啓動命令
* * * * * /usr/local/check/check_nginx.sh >> /tmp/check_nginx.log
3、查看定時任務
crontab -l
查看日誌
tail -200f /tmp/check_nginx.log