Ubuntu环境下Laravel队列Supervisor运行但不处理任务求助
解决Laravel SQS队列任务堆积未处理问题
1. 修复Supervisor配置的致命语法错误
你的queue-worker.conf里的command行末尾存在无效的-->(这是HTML转义残留的错误字符),会导致Worker进程无法正常初始化——哪怕Supervisor显示进程RUNNING,实际Worker并没有在消费任务。
修改后的正确配置示例(可根据需求调整超时等参数):
process_name=%(program_name)s_%(process_num)02d command=php /var/www/site/artisan queue:work sqs --sleep=3 --tries=3 --timeout=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=root numprocs=8 redirect_stderr=true stdout_logfile=/var/www/site/storage/logs/worker.log stopwaitsecs=3600
修改后执行以下命令重启Supervisor进程:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart queue-worker:*
2. 查看Worker日志定位具体问题
直接查看Worker日志的实时输出,获取错误细节:
tail -f /var/www/site/storage/logs/worker.log
常见错误原因包括:
- SQS连接失败(AWS密钥/区域/队列名称配置错误)
- 任务类找不到(命名空间错误或类文件缺失)
- 权限不足(无法写入日志或读取配置文件)
3. 手动测试队列命令排除Supervisor影响
直接在服务器上运行Worker命令,验证队列本身是否能正常工作:
cd /var/www/site && php artisan queue:work sqs --sleep=3 --tries=3 --verbose
如果手动运行也无响应,检查以下几点:
- 确认
.env文件中的SQS配置(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION、SQS_QUEUE)与实际SQS队列完全匹配 - 检查
jobs表的queue字段,确认任务所在队列与Worker监听的队列一致(未指定--queue参数时,Worker默认监听default队列) - 查看
failed_jobs表,确认是否有任务被标记为失败,或任务的available_at字段是否晚于当前时间(延迟任务)
4. 验证Laravel目录权限
即使使用root用户运行,仍需确保核心目录有读写权限:
chown -R root:root /var/www/site/storage /var/www/site/bootstrap/cache chmod -R 755 /var/www/site/storage /var/www/site/bootstrap/cache
内容的提问来源于stack exchange,提问作者Parsa Haghighi
相关产品推荐
相关产品推荐

