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