Skip to content

概述

在宝塔 Supervisor 或 Linux systemd 中添加 php think swoole 守护进程后,若进程状态频繁显示 FATALBACKOFF 或点击启动后立即停止,请按照本文档进行逐步诊断和修复。


快速定位:前台命令行执行排查

不要直接在后台反复重启,请通过 SSH 连接服务器,切换到站点根目录并以 www 用户身份前台运行启动命令:

bash
cd /www/wwwroot/你的项目目录
sudo -u www php think swoole

观察终端输出的错误信息,常见错误类型及解决方案如下:


常见错误与解决方案

提示禁用函数未删除(如 proc_openpcntl_signal

  • 错误表现Function proc_open() is disabled for security reasonsCall to undefined function pcntl_signal()
  • 解决办法
    1. 宝塔面板 -> 【软件商店】 -> 找到对应 PHP 版本(如 PHP-8.0) -> 【设置】 -> 【禁用函数】。
    2. 找到 proc_openpcntl_signalpcntl_alarm 等函数并删除禁用。
    3. 重载 PHP 配置。

端口被占用(Address already in use

  • 错误表现bind(127.0.0.1:20697) failed: Address already in use
  • 解决办法
    1. 查询占用该端口的进程:
      bash
      lsof -i :20697
    2. 若为历史残留的 Swoole 孤儿进程,执行强制清理:
      bash
      pkill -9 -f "php think swoole"
    3. 重新在 Supervisor 中启动守护进程。

PHP CLI 版本与扩展不匹配

  • 错误表现:提示扩展未安装(如 swooleredisfileinfo),但宝塔面板中已安装。
  • 根本原因:Linux 默认命令行环境变量中的 php(如 /usr/bin/php)指向了系统自带的低版本 PHP 或未安装扩展的 PHP。
  • 解决办法
    1. 执行 php -v 查看命令行默认版本。
    2. 在宝塔面板【网站】 -> 【PHP CLI 版本】中将命令行 PHP 统一切换为 PHP-8.0
    3. 或在 Supervisor 的启动命令中使用绝对路径:
      bash
      /www/server/php/80/bin/php think swoole

目录权限不足

  • 错误表现Permission denied,无法写入 runtime/ 目录或日志。
  • 解决办法
    bash
    chown -R www:www /www/wwwroot/你的项目目录
    chmod -R 755 /www/wwwroot/你的项目目录
    chmod -R 777 /www/wwwroot/你的项目目录/runtime

数据库或 Redis 连接失败

  • 错误表现PDOException: SQLSTATE[HY000] [2002] Connection refusedRedis connection failed
  • 解决办法
    1. 检查 MySQL 和 Redis 服务是否正常运行。
    2. 检查项目根目录下 .env 文件中的数据库用户名、密码、端口与 Redis 密码是否配置正确。

承信租多门店租赁商城系统官方文档