thinkphp 5.1 队列进程需由 supervisor 守护为常驻服务,防止终端关闭导致中断;须安装 supervisor、生成并配置 /etc/supervisord.conf,在 /etc/supervisord.d/ 下创建专属 .ini 文件,严格设置 command(php 绝对路径+think)、user(非 root)、autorestart=true、startretries=0、stopwaitsecs=120、killasgroup=true,再执行 supervisorctl reread && update && start 启动并验证 running 状态。

ThinkPHP 5.1 启动队列消费进程(如 php think queue:work)后,一旦终端关闭或系统资源回收,进程立即终止,任务积压无法处理,必须用 Supervisor 将其转为受控常驻服务,确保崩溃后自动拉起、日志可追溯、启动路径与权限严格隔离。
安装并启用 Supervisor 服务
Supervisor 必须作为系统级守护进程先运行起来,否则所有子进程配置都无效。
执行 yum install -y epel-release supervisor(CentOS/RHEL)或 apt-get install -y supervisor(Ubuntu/Debian)完成安装。
生成主配置文件:echo_supervisord_conf > /etc/supervisord.conf,这一步不可跳过,否则后续 include 指令失效。
编辑 /etc/supervisord.conf,在文件末尾添加两行:
[include]files = /etc/supervisord.d/*.ini
启动服务并设为开机自启:systemctl enable supervisord && systemctl start supervisord。
验证状态:systemctl status supervisord,输出中必须出现 【active (running)】,否则后续全部配置不会加载。
创建 ThinkPHP 专属的 INI 配置文件
每个 ThinkPHP 队列进程必须独占一个 INI 文件,禁止多个项目共用同一配置,否则 user 权限和 directory 路径会相互污染。
在 /etc/supervisord.d/ 目录下新建文件,例如:tp5-queue.ini。
填入以下内容(【务必替换所有路径为你的实际部署路径】):
[program:tp5-queue]command=/www/server/php/82/bin/php /www/wwwroot/myapp/think queue:work --queue default --daemon --memory=128 --sleep=3directory=/www/wwwroot/myappuser=wwwautostart=trueautorestart=truestartsecs=3redirect_stderr=truestdout_logfile=/var/log/supervisor/tp5-queue-out.logstderr_logfile=/var/log/supervisor/tp5-queue-err.log
注意:command 中的 PHP 路径必须是宝塔或系统中真实的二进制路径,不能写 php;think 前面不能加 php,否则 Supervisor 会报“command not found”。
user 必须是非 root 用户(如 www),若设为 root,Supervisor 会拒绝启动并记录 SECURITY 错误。
强制设置四项保活核心参数
ThinkPHP 队列进程有优雅退出机制,Supervisor 默认参数极易误判为异常而粗暴杀掉进程,必须显式覆盖以下值:
① autorestart=true —— 关闭 unexpected 模式,避免单次 warning 日志触发重启;
② startretries=0 —— 禁用启动重试次数限制,防止首次因 Redis 连接未就绪失败后永久停服;
③ stopwaitsecs=120 —— 给进程留足 120 秒完成当前任务再退出,否则 --daemon 模式下可能丢任务;
④ killasgroup=true —— 确保 kill 信号发给整个进程组,避免子进程残留成僵尸。
这四行必须全部写入 INI 文件的 [program:xxx] 区块内,缺一不可。
重载配置并启动进程
执行 supervisorctl reread 让 Supervisor 扫描新 INI 文件。
执行 supervisorctl update 加载变更后的配置。
执行 supervisorctl start tp5-queue 启动进程(名称与 INI 中 [program:xxx] 一致)。
检查状态:supervisorctl status tp5-queue,输出应为 RUNNING,PID 显示为数字。
查看实时日志:tail -f /var/log/supervisor/tp5-queue-out.log,确认无 “Connection refused” 或 “Class not found” 类错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











