跳转至

Shell 脚本监控 Nginx 502 Bad Gateway 自动重启 php-fpm

Shell 脚本监控

此脚本可暂时解决 php-fpm 偶尔因为内存不足等挂掉导致的 Nginx 502 Bad Gateway 错误。

需确保 VPS 系统已安装 curl, CentOS 可以执行:yum install curl ;Debian/Ubuntu 可以执行:apt-get install curl 安装。

用 WinSCP 或 ssh 登录 VPS 使用 vi 命令在/root 目录下创建 check502.sh 脚本,代码如下:

#!/usr/bin/env bash

CheckURL="https://example.com/wp-admin/"

STATUS_CODE=`curl -o /dev/null -m 10 --connect-timeout 10 -s -w %{http_code} $CheckURL`
#echo "$CheckURL Status Code:\t$STATUS_CODE"
if [ "$STATUS_CODE" = "502" ]; then
    systemctl restart php-fpm.service
fi

https://example.com/wp-admin/ 改为实际需要监控地址,需要注意如果开启了缓存,缓存页面就算 php 挂了,也不会马上出 502 状态 —— 缓存失效前都还可以正常访问,此时 http 状态码是 200

CentOS Stream release 8 使用 OneinStack 安装的 LNMP 使用 systemctl restart php-fpm.service 可正常重启 php-fpm,而使用 service php-fpm restart 在 SSH 中执行可正常运行,在定时任务中无法正常工作

Debian / Ubuntu 系统可尝试使用 /etc/init.d/php-fpm restart

修改SH文件权限

chmod +x /root/check502.sh

添加自动执行任务

用 crontab 一分钟执行一次 /root/check502.sh,crontab -e 添加如下任务:

*/1 * * * * /root/check502.sh