supervisor
程序开了两个队列(A和B),一开始查日志的时候
tail -f xxx
发现A队列总是出现没有数据的情况,而每次都是在B队列能查到数据,任务的执行效率也降低了一些,开始没发现,后面改了代码后,代码没生效
- 考虑到是服务器(nginx\php), 查了下状态没有生效
无异常
- 代码仓库问题,上服务器查文件
无异常
- 日志返回没有打印出测试的文本,考虑是队列可能不会根据代码更新而生效,可能需要重启下
找到问题的根源
排查过程
两个队列:
此时发现其中一个队列出现问题
看了网上的教程后,Exited too quickly (process log may have details) 出现的原因是 程序出现错误。
立马重启:命令 supervisorctl restart laravel-job-worker:laravel-job-worker_00
重启后恢复,运行状态,感觉可能出现的问题是队列没有跑最新的代码,于是重启了另外一个正常的队列,验证后确定是正常了
附supervisorctl 常用命令 :
supervisorctl status
supervisorctl stop 队列名
supervisorctl start 队列名
supervisorctl restart 队列名
supervisorctl reread
supervisorctl update
supervisorctl reload
带着问题找原因:
因为队列处理器是常驻进程,他们在重启前不会应用你代码的更改。因此,部署使用队列处理器的应用最简单的方法是在部署进程中重启队列处理器。你可以平滑地重启所有队列处理器通过使queue:restart 方法:
php artisan queue:restart
后面遇到这种问题,优先使用 php artisan queue:restart
其次,人力预算成本高一点的话,个人觉得还是使用rabbitMQ, 这种改一次要跑 重启命令的方式,讲道理,谁顶得住, 代码能跑就行