背景

服务器上跑的是LNMP环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是nginx最为普遍的错误状态码。由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,则会一直持续很长时间。所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm。

需求

1 . access_log /data/log/access.log
2.脚本死循环,每10s检测一次(假设每10s钟的日志条数为300左右)
3.重启php-fpm 的方法是/etc/init.d/php-fpm restart

设计思路

  1. 找到log文件路径
  2. 检查log文件中的内容
  3. 查看是否有502的情况出现
  4. 出现了502重启php-fpm服务
  5. 如果出现问题将报错添加到报错文件,并发送邮件告诉运维人员
  1. #!/bin/bash
  2. log=/data/log/access.log #设置log文件的路径
  3. while :
  4. do
  5. 520_n=`taile -n 300 $log | grep -c '502'` #检查300行,查看502的数量
  6. if [ -z "$502_n" ] #如果502位空
  7. then
  8. exit
  9. fi
  10. if [ $502_n -gt 100 ] #如果502大于100
  11. then
  12. /etc/init.d/php-fpm restart > /dev/null 2> /tmp/php-fpm.err #重启php-fpm 错误输出放入到/tmp/php-fpm.err
  13. fpm_p_n=`pgrep -l php-fpm | wc -l` #查看此时有多少php-fpm进程
  14. if [ $fpm_p_n -eq 0 ] #如果进程为0
  15. then
  16. python3 mail.py 1182350036@qq.com "php-fpm 重启失败""`head -l /tmp/php-fpm.err`" #发邮件
  17. exit
  18. fi
  19. fi
  20. sleep 10 #10秒查看一次
  21. done