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-08-16 at 16:42

    I will be there for you.

  2. 2016-08-18 at 12:20

    Your company is very impressive .

  3. 2016-08-18 at 17:06

    You ‘re so smart.

  4. 2016-08-19 at 10:56

    No, I know.

  5. 2016-08-19 at 21:16

    You’re very eloquent.

发表评论

邮箱地址不会被公开。