Supervisor运行queue:work但未执行Laravel队列任务求助
解决Laravel队列进程运行但任务未处理的问题
从你的配置和进程状态来看,最核心的问题大概率出在命令参数的格式错误上,我们一步步拆解排查:
1. 修复命令中的参数拼写问题
先看你的Supervisor配置里的command字段:
command=php ~/www/artisan queue:work --queue=default--tries=3 --daemon
这里--queue=default和--tries=3之间缺少了空格,导致Laravel把队列名称识别成了default--tries=3,而你的任务实际在default队列里,进程自然找不到要处理的任务。
把命令修正为:
command=php ~/www/artisan queue:work --queue=default --tries=3
另外补充:Laravel 5.3及以后版本已经移除了--daemon选项,queue:work默认就是守护进程模式,所以可以直接去掉这个参数,避免日志里出现不必要的警告。
2. 让Supervisor配置生效并重启进程
修改完配置文件后,需要执行以下命令让新配置生效:
supervisorctl reread supervisorctl update supervisorctl restart laravel-worker:*
3. 手动验证命令有效性
先脱离Supervisor,直接在终端运行修正后的命令:
php ~/www/artisan queue:work --queue=default --tries=3
观察是否能正常处理数据库中的任务:
- 如果手动运行可以处理,说明问题确实出在Supervisor的命令配置上,重启进程后就正常了
- 如果手动运行也不行,继续排查以下点:
- 检查
jobs表中的queue字段值是否确实是default,有没有拼写错误 - 查看Laravel日志
~/www/storage/logs/laravel.log,看是否存在数据库连接失败、文件权限不足等异常信息 - 确认运行Supervisor的用户有足够权限读取项目文件和访问数据库
- 检查
4. 额外排查点
如果以上步骤都没问题,还可以检查:
- 查看Supervisor自身的日志(可在Supervisor主配置文件中找到日志路径),是否有进程启动异常的记录
- 用
php artisan queue:failed命令查看是否有任务被标记为失败,导致无法重复执行
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

