丁祖平

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

【题目要求】

服务器上跑的是LNMP环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是nginx最为普遍的错误状态码。

由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,则会一直持续很长时间。

所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm。

502 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

我们设定:

1)access_log /data/log/access.log

2)脚本死循环,每10s检测一次(假设每10s钟的日志条数为300左右)

3)重启php-fpm的方法是 /etc/init.d/php-fpm restart

【核心要点】

用curl检测状态码是否是502或者通过分析访问日志判断状态码的比率
重启php-fpm服务的命令

【脚本】

#!/bin/bash

log=/data/log/access.log
while :
do
    502_n=`tail -n 300 $log | grep -c ' 502 '`
    if [ -z "$502_n" ]; then
        exit
    fi

    if [ $502_n -gt 100 ]; then
        /etc/init.d/php-fpm restart > /dev/null 2 > /tmp/php-fpm.err
        fpm_p_n=`pgrep -l php-fpm | wc -l`
        
        if [ $fpm_p_n -eq 0 ]; then
            python mail.py 123@123.com "php-fpm重启失败" "`head -1 /tmp/php-fpm.err`"
        exit
        fi
    fi
sleep 10
done

 

posted on 2019-04-25 15:38  丁祖平  阅读(489)  评论(0编辑  收藏  举报