Linux下实时监测 nginx 和 php 的运行状态

LNMP的环境下,如果出现nginx或php服务意外停止的情况。我们应当及时发现以免一些不必要造成损失。
先贴出我的测试shell脚本:

#! /bin/bash
#拿到 nginx 运行的状态 ,正常运行 $nginx = 80
nginx=`netstat -ant | grep 0.0.0.0:80 | awk ‘{print $4}’ | awk -F : ‘{print $2}’`
#拿到 php-fpm 运行的状态,如果 php-fpm 没有启动则 $php = stopped
php=`service php-fpm status | awk ‘{print $3}’`
#日志文件路径,如果不存在会自动创建的
log=/home/wlq/workspace/service.log

if [ “$nginx” = 80 ]
then
echo “`date` nginx is running” >> $log
else
echo “`date` nginx error will restart” >> $log
service nginx start
sleep 2
echo “`date` nginx restart done” >> $log
echo “ningx已停止运行,请及时登陆服务器排查” | mail -s “service warring” xxx@qq.com
fi
if [ “$php” = stopped ]
then
echo “`date` php-fpm error will restart” >> $log
service php-fpm start
sleep 2
echo “`date` php-fpm restart done” >> $log
echo “php-fpm已停止运行,请及时登陆服务器排查” | mail -s “service warring” -t xxx@qq.com -t xxxxxx@qq.com
else
echo “`date` php-fpm is running” >> $log
fi

下面一步一步来解释:
nginx=`netstat -ant | grep 0.0.0.0:80 | awk ‘{print $4}’ | awk -F : ‘{print $2}’`
显示网络端口的使用情况( netstat -ant ),并且使用管道正则匹配到 0.0.0.0:80 的一列 (视nginx使用端口的具体情况而定,我这边 0.0.0.0:80)
使用 awk 命令来截取80, 具体awk的操作可以自行百度
如果nginx服务正常运行,且端口是80,则 netstat -ant | grep 0.0.0.0:80 | awk ‘{print $4}’ | awk -F : ‘{print $2}’ 能得到80,所以我们能借助这个值来判断nginx是否正常运行,同理php-fpm的运行状态也能靠 service php-fpm status | awk ‘{print $3}’ 得到
2016-03-05 17:38:48屏幕截图

接下来就是根据拿到的状态来判断 nginx 和 php-fpm 的运行状态了,如果服务没有启动就把错误写入日志并重启相应服务而且还会发送邮件给管理员(linux 发送邮件 可以百度 mail 和 sendmail)邮件一般发送到垃圾箱去了  ̄へ ̄
2016-03-05 18:00:15屏幕截图

如果脚本可以运行的话,接下来我们可以设置一个定时执行的命令来实时监测。
linux 下 使用 crontab 命令来定时执行,注意一定要有能重启service权限的用户,建议使用root用户

  5 comments for “Linux下实时监测 nginx 和 php 的运行状态

  1. 2016年8月16日 at 16:42

    I will be there for you.

  2. 2016年8月18日 at 12:20

    Your company is very impressive .

  3. 2016年8月18日 at 17:06

    You ‘re so smart.

  4. 2016年8月19日 at 10:56

    No, I know.

  5. 2016年8月19日 at 21:16

    You’re very eloquent.

发表评论

电子邮件地址不会被公开。