php-fpm 启动失败,状态码78

举报
林欣 发表于 2025/09/21 23:01:35 2025/09/21
【摘要】 [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” 进入了保护状态(停止自动重启)。


关键问题分析

  1. 错误代码 78

    • 在 PHP-FPM 中,78 通常表示 配置文件错误(如语法错误、路径无效、权限问题等)。
    • 虽然日志没有直接显示具体错误,但我们可以手动测试配置文件。
  2. systemd 限制

    • 由于多次启动失败,systemd 暂时禁止重启服务。需要先重置失败计数:
      systemctl reset-failed php-fpm
      

详细排查步骤

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 或其包含的子配置文件(如 *.confpool.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-datanginxnobody 用户运行,确保该用户有权访问:

    • 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/
      

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 因 ulimitsystemd 限制无法启动,修改服务文件:
    vim /usr/lib/systemd/system/php-fpm.service
    
    [Service] 部分添加:
    LimitNOFILE=65535
    
    然后重新加载 systemd:
    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
  • 终端会输出详细错误信息(如缺少模块、权限问题等)。

临时解决方案

如果急需恢复服务,可以尝试:

  1. 重置 systemd 失败计数
    systemctl reset-failed php-fpm
    
  2. 修改 PHP-FPM 配置(如更换端口或用户)后重启:
    systemctl start php-fpm
    

总结

  1. 优先检查配置文件php-fpm --test)。
  2. 检查端口/权限netstat + ls -ld)。
  3. 查看错误日志/var/log/php-fpm/error.log)。
  4. 手动运行调试(直接执行 php-fpm 命令)。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。