使用crontab配合shell腳本定時檢測拉起服務

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章