php-fpm 启动失败,状态码78
【摘要】 [root@centos7-os ~]# systemctl status php-fpm● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Activ...
[root@centos7-os ~]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Fri 2025-09-12 13:15:42 CST; 4s ago
Process: 31554 ExecStart=/usr/local/php8/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8/etc/php-fpm.conf (code=exited, status=78)
Main PID: 31554 (code=exited, status=78)
Sep 12 13:15:42 centos7-os systemd[1]: Unit php-fpm.service entered failed state.
Sep 12 13:15:42 centos7-os systemd[1]: php-fpm.service failed.
Sep 12 13:15:42 centos7-os systemd[1]: php-fpm.service holdoff time over, scheduling restart.
Sep 12 13:15:42 centos7-os systemd[1]: start request repeated too quickly for php-fpm.service
Sep 12 13:15:42 centos7-os systemd[1]: Failed to start The PHP FastCGI Process Manager.
Sep 12 13:15:42 centos7-os systemd[1]: Unit php-fpm.service entered failed state.
Sep 12 13:15:42 centos7-os systemd[1]: php-fpm.service failed.
从最新的 systemctl status php-fpm
输出来看,PHP-FPM 仍然启动失败,错误代码依然是 status=78
(配置问题),并且 systemd 因 “start request repeated too quickly” 进入了保护状态(停止自动重启)。
关键问题分析
-
错误代码
78
- 在 PHP-FPM 中,
78
通常表示 配置文件错误(如语法错误、路径无效、权限问题等)。 - 虽然日志没有直接显示具体错误,但我们可以手动测试配置文件。
- 在 PHP-FPM 中,
-
systemd 限制
- 由于多次启动失败,systemd 暂时禁止重启服务。需要先重置失败计数:
systemctl reset-failed php-fpm
- 由于多次启动失败,systemd 暂时禁止重启服务。需要先重置失败计数:
详细排查步骤
1. 检查 PHP-FPM 配置文件语法
运行以下命令测试配置文件是否正确:
/usr/local/php8/sbin/php-fpm --test --fpm-config /usr/local/php8/etc/php-fpm.conf
- 如果输出
configuration file ... is valid
,说明配置文件语法正确,问题可能是其他原因(如权限、端口冲突)。 - 如果有错误,根据提示修改
/usr/local/php8/etc/php-fpm.conf
或其包含的子配置文件(如*.conf
在pool.d/
目录下)。
2. 检查 PHP-FPM 监听端口/套接字
- 查看配置文件中
listen
的值(通常是127.0.0.1:9000
或/run/php-fpm.sock
):grep "listen" /usr/local/php8/etc/php-fpm.conf
- 检查端口是否被占用:
netstat -tulnp | grep 9000 # 如果 listen 是 9000 # 或 ss -tulnp | grep 9000
- 如果端口被占用,修改
php-fpm.conf
中的listen
为其他端口(如9001
),或停止占用进程。
- 如果端口被占用,修改
3. 检查 PHP-FPM 运行用户权限
-
PHP-FPM 默认以
www-data
、nginx
或nobody
用户运行,确保该用户有权访问:- PID 文件路径(如
/var/run/php-fpm/php-fpm.pid
) - 日志目录(如
/var/log/php-fpm/
) - 套接字文件路径(如
/run/php-fpm.sock
)
检查权限示例:
ls -ld /var/run/php-fpm/ /var/log/php-fpm/
- 如果权限不足,修改属主:
chown -R www-data:www-data /var/run/php-fpm/ /var/log/php-fpm/
- PID 文件路径(如
4. 检查 PHP-FPM 错误日志
- 查看 PHP-FPM 的错误日志(路径通常在
php-fpm.conf
中定义,如error_log = /var/log/php-fpm/error.log
):tail -n 50 /var/log/php-fpm/error.log
- 如果日志不存在,可能是权限问题,手动创建并设置权限:
mkdir -p /var/log/php-fpm/ touch /var/log/php-fpm/error.log chown www-data:www-data /var/log/php-fpm/error.log
- 如果日志不存在,可能是权限问题,手动创建并设置权限:
5. 检查系统资源限制
- 如果 PHP-FPM 因
ulimit
或systemd
限制无法启动,修改服务文件:
在vim /usr/lib/systemd/system/php-fpm.service
[Service]
部分添加:
然后重新加载 systemd:LimitNOFILE=65535
systemctl daemon-reload
6. 手动启动 PHP-FPM 调试
绕过 systemd,直接运行 PHP-FPM 并观察错误:
/usr/local/php8/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8/etc/php-fpm.conf
- 终端会输出详细错误信息(如缺少模块、权限问题等)。
临时解决方案
如果急需恢复服务,可以尝试:
- 重置 systemd 失败计数:
systemctl reset-failed php-fpm
- 修改 PHP-FPM 配置(如更换端口或用户)后重启:
systemctl start php-fpm
总结
- 优先检查配置文件(
php-fpm --test
)。 - 检查端口/权限(
netstat
+ls -ld
)。 - 查看错误日志(
/var/log/php-fpm/error.log
)。 - 手动运行调试(直接执行
php-fpm
命令)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)