queue:work 经常过一段时间不再处理队列是什么原因?

参考的laravel的文档,使用supervisor管理队列处理进程: php artisan queue:work --daemon,由于项目不断会有新的任务进入队列,所以希望队列是保持一直运行。但是过一段时间,查看进程ps -aux | grep 'artisan' 仍然能看到进程在运行,但是已经不处理队列了,需要supervisor restart重启任务才行,这是什么原因造成的呢,是supervisor的问题还是laravel队列处理的问题?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

建议看看 supervisor 的运行日志和错误日志。

7年前 评论

php artisan queue:work每次只处理一个任务,处理完就退出了,用php artisan queue:listen会监听任务队列,有了新任务就fork一个woker进程来处理任务。

7年前 评论

@zhuzhichao 感谢,已经解决了

7年前 评论

@song 感谢,已经解决了

7年前 评论

@copyrenzhe 可以分享一下怎么解决的。:smile:

7年前 评论

@zhuzhichao 具体原因我还未找到,只不过使用了另一种方式实现需求跳过了这个问题。
由于我每个任务都需要更新大量数据,耗时长,于是我把php的最大执行时间设置为0,当时任务中采用的循环调用updateOrCreate方法来处理数据,然后经常更新了部分数据,php artisan queue:work的进程就停在这个任务上了,也没有数据库连接数过多或超时或拒绝的报错。
之后修改了方法,采用批量更新的方法,并捕获异常,针对异常情况再单独调用单个更新,之后这个问题没有重现。

7年前 评论

还是建议看一下 supervisor 的 log 文件,看看究竟什么原因。

7年前 评论

@zhuzhichao supervisor的log文件没有报错信息

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!