作为新手的我,自己shell挺薄弱的,脚本可能存在弊端,百度了好多linux判断nginx状态的,结合了他们的经验,自己着手写了一个简单的,代码如下:
#! /bin/bash
#author:liud
#function:用于nginx监控
NGINXPATH=/usr/local/nginx/sbin/nginx
Url="http://www.yuxi.gov.cn/"
LOG_DIR=/data/monitor/
LOG_FILE=nginx_`date +%Y-%m-%d`.log
NowTime=`date +%Y-%m-%d_%H:%M:%S`
# 日志目录不存在的话则创建目录
[ ! -d $LOG_DIR ] && mkdir -p $LOG_DIR
#这里采用pid的方式判断,也有其他方式可以判断
PidNum=`ps -C nginx -o pid|grep -v PID|wc -l`
# 如果去除掉PID的话还有1个或一个以上,说明nginx正在启动
if [ $PidNum -ge 1 ];then
# 启动了但是不一定成功.利用wget访问看看是否成功了 Url取自己的服务url吧
# nginx当前处于启动状态,但是url连不上,可以重启一下nginx; 这里做个循环的,比如说循环十次,wget成功了就跳出循环,十次都失败了,需要通知技术人员
wget -T 10 -q --spider "$Url" >/dev/null 2>&1
if [ $? -ne 0 ];then
echo "${NowTime}, nginx is running, but fail to access the web site" >>$LOG_DIR/$LOG_FILE
$NGINXPATH -s reload >/dev/null
else
# nginx正常,将检查日志追加方式记录到日志文件中
echo "${NowTime}, nginx is running" >>$LOG_DIR/$LOG_FILE
fi
else
# nginx没有再运行,需要启动一下
echo "${NowTime},nginx is not running. trying starting">>$LOG_DIR/$LOG_FILE
$NGINXPATH >/dev/null
fi