如何修复 Ubuntu 上卡住的 PHP-FPM 服务(502 Bad Gateway)
2025-09-15•6 min read
您的 Nginx 站点出现 502 Bad Gateway 错误。您重启 PHP-FPM 时遇到类似 Job for php8.3-fpm.service failed... 的错误。这是我修复此问题的快速、可靠的方法。
1) 找出真正的问题
当 systemctl
显示类似 status=78
的失败时,通常指向配置错误。首先测试配置:
sudo php-fpm8.3 -t
如果此命令通过但服务仍无法启动,请检查完整的服务日志:
sudo journalctl -xeu php8.3-fpm.service
查找类似以下的 ERROR 行:
ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock
这意味着一个旧的/卡住的 PHP-FPM 进程仍在监听该套接字,阻止了新实例的启动。
2) 修复方法:清除旧进程
在下面的命令中,将 /var/run/php/your-socket-name.sock
替换为您错误日志中的实际套接字路径。
查找卡住的进程 (PID)
sudo lsof /var/run/php/your-socket-name.sock
此命令会打印出占用该套接字的进程(可能以
root
用户运行)。记下其 PID。停止该进程
# 将 12345 替换为实际的 PID sudo kill 12345
如果几秒钟后它仍拒绝关闭,您可以强制终止它(谨慎使用):
sudo kill -9 12345
删除过时的套接字文件
sudo rm /var/run/php/your-socket-name.sock
PHP-FPM 在启动时会重新创建它。
启动 PHP-FPM
sudo systemctl start php8.3-fpm
您的服务现在应该可以干净地启动了。验证状态:
systemctl status php8.3-fpm
3) 为什么会发生这种情况
如果 PHP-FPM 崩溃或被意外终止,它可能会留下一个正在运行的子进程或一个过时的套接字。Systemd 会尝试启动一个新的主进程,但套接字已被占用。
4) 下次如何预防
- 优雅重启:对于配置更改,优先使用
systemctl reload php8.3-fpm
。 - 监控日志:监控
/var/log/php8.3-fpm.log
(或您的发行版的路径)以发现崩溃。 - 套接字 vs. 端口:如果您持续遇到套接字冲突,在调试期间可以考虑暂时使用 TCP (127.0.0.1:9000)。
快速复制粘贴清单
# 1) 检查配置是否正常
sudo php-fpm8.3 -t
# 2) 检查服务日志
sudo journalctl -xeu php8.3-fpm.service
# 3) 如果出现 "already listen" 错误 -> 释放套接字
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock
# 4) 启动服务
sudo systemctl start php8.3-fpm
# 5) 验证
systemctl status php8.3-fpm