Laravel问题:队列任务(Queue Job)未被执行
排查任务未执行问题的实用步骤
1. 确认队列Worker进程状态
- 用进程命令(比如
ps aux | grep queue)检查Worker进程是否在运行,有没有意外退出的情况。 - 若用Supervisor、Systemd管理进程,直接查看服务状态,确认是否处于active,有没有重启记录。
2. 核对队列连接配置
- 确保任务分发端和Worker使用完全相同的数据库/队列服务配置,比如不要出现任务写到数据库A,Worker却连接数据库B的情况。
- 检查数据库连接字符串、账号权限,确认Worker有Jobs表的
SELECT和UPDATE权限。
3. 检查任务状态与队列归属
- 查看Jobs表中任务的
status字段,确认是Worker监听的状态(比如pending),避免任务被标记为reserved或其他异常状态导致被跳过。 - 如果用了多队列,核对任务的
queue字段值,和Worker启动时指定的监听队列名称是否一致。
4. 查看Worker自身日志
- 很多队列Worker自带运行日志,即使任务代码没打日志,Worker启动、拾取任务的过程也会有记录。找到Worker日志文件,检查是否有连接失败、权限报错等信息。
- 临时把Worker日志级别调到
debug,重启后观察详细输出,看是否有任务拾取的相关日志。
5. 手动测试任务拾取
- 在Jobs表手动插入一条极简任务,然后用队列命令行工具触发一次单次任务拾取(比如部分框架支持
queue:work --once),看Worker是否能读取并执行该任务。 - 若手动拾取也失败,优先排查数据库连接或Worker的基础配置问题。
6. 排查系统资源限制
- 检查服务器CPU、内存、磁盘空间是否充足,资源耗尽会导致Worker无法正常运行。
- 查看系统
ulimit设置,确认文件描述符、进程数等限制没有影响Worker的数据库连接或任务处理。
内容的提问来源于stack exchange,提问作者Fhuu
相关产品推荐
相关产品推荐

