服务器上跑LNMP环境,最近总是有502现象。502为网站访问的状态码,200为正常,502错误是Nginx最为普遍的错误状态码。由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,就是一直持续很长的时间。所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,就会自动重启php-fpm。
假定:
访问日志路径 /data/log/access.log
脚本死循环,每10秒检测一次(假如10秒钟的日志条数为300)
重启php-fpm /etc/init.d/php-fpm restart
思路:
检测502状态码有两种方法:1.curl命令
2.统计访问日志
由于curl只能获取网站的每个时刻的状态码,并不能代表网站一段时间的状态码,因此不合适。
由于是10s内检测一次,需要把10s的日志(日志为300条)过滤出来,并统计出有502状态码的次数。一般502状态码超过10%已经十分严重。我们可以设定一个值为10条 当502状态码的次数大于10条就重启php-fpm。
内容:
1 |
|
解析:
sleep 60
代表当php-fpm重启后,再过1分钟后再次检测,这样做的目的是为了防止因为脚本bug导致php-fpm服务崩溃。假如脚本有问题,一直检测502,10s重启一次php-fmp,会导致系统的稳定性。