linux下php-fastcgi监控脚本

By | 2012/03/20

最近服务器在运行一段时间后,会出现502错误。结合互联网上的资料写了php采用php-fpm在fastcgi模式下502及504错误解决办法这篇文章,本以为可以完美的解决这个问题。可当一段时间观察发现并不是文章中指出的问题导致的,同时相关日志里面并没有找到有效的出错信息。下面是最后还算有效的解决办法了:

找不到出错原因的情况下,找到了下面的脚本对运行在php-fpm模式下的fastcgi进行监控,如果发现响应超时,则会重启php-fpm及fastcgi进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if [ -e /var/lock/subsys/502 ]
then
    killall -9 curl 2>/dev/null
    killall -9 php-fpm 2>/dev/null
    killall -9 php-cgi 2>/dev/null
    service php-fpm start >/dev/null
    echo "[ `date +'%h %d %T'` ] PHP-FPM died with no response, all processes restarted">>log.txt
else
    touch /var/lock/subsys/502
    if [ `curl --connect-timeout 5 -I http://23live.cn/ 2>/dev/null | grep '502 Bad Gateway' -c` != '0' ]
    then
        killall -9 php-fpm 2>/dev/null
        killall -9 php-cgi 2>/dev/null
        service php-fpm restart >/dev/null
        echo "[ `date +'%h %d %T'` ] PHP-FPM died with 502 bad gateway, all processes restarted">>log.txt
    fi
    rm -f /var/lock/subsys/502
fi

脚本需要安装了curl了,唯一需要修改的地方就是里面涉及到的网址,即通过这个地址来判定服务器是否出现故障。通过crontab每1分钟执行下这个脚本就行了。就可以实现fastcgi无法响应的时候,服务自动重启。

ps:通过上面的脚本,得出一个可能导致502错误的原因,不过仅是猜测。应该是php-fpm对php的进程管理不善导致的,即时php-fpm停掉了,php进程还是在自己跑。因此只是重启php-fpm是无效的,必须kill掉php-cgi才可以。

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据