要使ThinkPHP6.1队列任务稳定执行,需确保配置Redis驱动并隔离select库,用queue:work --daemon启动常驻消费者,再通过Supervisor守护进程化运行。

你需要让ThinkPHP6.1的队列任务被稳定监听并执行,而不是推入后石沉大海,必须明确启动的是消费端进程、指定正确队列名、匹配驱动配置,且不能依赖前台终端常驻。
确认队列驱动已启用并配置正确
打开 config/queue.php,检查 【'default' => 'redis'】 是否指向你实际启用的驱动;若使用 Redis,确保 'host'、'port'、'select' 与 Redis 服务完全一致,【select 值必须与业务缓存隔离,建议设为 2 或 3】,否则任务可能被 flushdb 清空。
运行 php think queue:status(如无该命令需手动添加)或直接执行 redis-cli llen default,返回非零值说明任务已入队,但尚未被消费。
启动消费者监听进程
方法一:实时调试用 listen 模式
在项目根目录执行:php think queue:listen --queue=default --delay=1 --memory=128
该命令每次拉取任务前重新加载框架,修改 Job 类后无需重启,适合开发阶段验证逻辑是否触发。
方法二:生产环境推荐 work --daemon 模式php think queue:work --daemon --queue=default --sleep=1 --max-jobs=500
此方式常驻内存,不重载类文件,性能高;但 【修改 job 类中的 fire() 方法后必须手动终止并重跑该命令】,否则旧代码持续执行。
按 Ctrl + C 可随时中止监听进程。
守护进程化运行(防止终端关闭中断)
第一步:安装 Supervisor(Ubuntu 示例)sudo apt-get install supervisor
第二步:创建配置文件 /etc/supervisor/conf.d/thinkphp-queue.conf
内容如下:
[program:tp6-queue]
command=php /var/www/myapp/think queue:work --daemon --queue=default --sleep=1
directory=/var/www/myapp
user=www-data
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tp6-queue.log
第三步:重载并启动sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start tp6-queue
执行后用 sudo supervisorctl status 确认状态为 RUNNING。
这一步做完,消费者就真正“活”在后台了,不再依赖你的 SSH 连接。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











