php-fpm启动失败 Address already in use

举报
林欣 发表于 2025/09/21 23:02:55 2025/09/21
【摘要】 [root@centos7 ~]# /usr/local/php8/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8/etc/php-fpm.conf[12-Sep-2025 13:16:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000':...
[root@centos7 ~]# /usr/local/php8/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8/etc/php-fpm.conf
[12-Sep-2025 13:16:58] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
[12-Sep-2025 13:16:58] ERROR: FPM initialization failed

问题定位

从手动启动 PHP-FPM 的错误日志来看,关键错误是:

ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)

这表明 127.0.0.1:9000 端口已被其他进程占用,导致 PHP-FPM 无法绑定到该端口,从而启动失败。


解决方案

1. 确认占用端口的进程

运行以下命令查看哪个进程占用了 9000 端口:

netstat -tulnp | grep 9000
# 或
ss -tulnp | grep 9000

可能的结果

  • 另一个 PHP-FPM 实例(如旧版本或未停止的服务)。
  • 其他服务(如 Nginx、Apache 或某些应用)。

2. 终止占用端口的进程

如果确认是无关进程占用端口,可以终止它:

kill -9 <PID>  # 替换 <PID> 为实际进程 ID

示例

kill -9 12345  # 假设 12345 是占用 9000 端口的进程

3. 修改 PHP-FPM 监听端口

如果无法终止占用进程(如另一个关键服务正在使用 9000 端口),可以修改 PHP-FPM 的监听端口:

  1. 编辑 PHP-FPM 配置文件:
    vim /usr/local/php8/etc/php-fpm.conf
    
  2. 找到 listen 参数,修改为其他端口(如 9001):
    listen = 127.0.0.1:9001
    
  3. 保存文件并重启 PHP-FPM:
    systemctl restart php-fpm
    

4. 检查 PHP-FPM 配置重复

如果系统中有多个 PHP-FPM 实例(如 PHP 7.x 和 PHP 8.x),确保它们的 listen 端口不冲突。例如:

  • PHP 7.x 监听 127.0.0.1:9000
  • PHP 8.x 监听 127.0.0.1:9001

5. 验证修改

再次检查端口占用情况:

netstat -tulnp | grep 9000  # 确认原端口已释放
netstat -tulnp | grep 9001  # 确认新端口已监听

附加建议

  1. 检查 systemd 服务文件
    确保 /usr/lib/systemd/system/php-fpm.service 中的 ExecStart 路径与实际 PHP-FPM 路径一致:

    grep ExecStart /usr/lib/systemd/system/php-fpm.service
    

    如果路径错误,修正后运行:

    systemctl daemon-reload
    
  2. 查看 PHP-FPM 错误日志
    如果问题仍然存在,检查日志获取更多信息:

    tail -n 50 /var/log/php-fpm/error.log
    
  3. 防火墙/SELinux 检查
    如果修改端口后仍无法访问,确保防火墙或 SELinux 未阻止新端口:

    firewall-cmd --list-ports          # 查看防火墙开放端口
    firewall-cmd --add-port=9001/tcp   # 开放端口(示例)
    setenforce 0                       # 临时关闭 SELinux(测试用)
    

总结

  • 根本原因127.0.0.1:9000 端口被占用,导致 PHP-FPM 启动失败。
  • 解决步骤
    1. 确认占用端口的进程(netstat/ss)。
    2. 终止无关进程或修改 PHP-FPM 的监听端口。
    3. 重启 PHP-FPM 并验证。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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