描述一下问题:
supervisor 起了几百个消费进程都是 php artisan queue:work --queue=每个不一样
理论上,发送 TERM 信号给 supervisor ,它会挨个发送给每个进程,然后 laravel 本身也处理了 term 信号,会在当前正在处理的 job 处理完后自动退出进程,并且 exitcode 是 0
但是经过实际测试,给 supervisor 进程发送 TERM 信号后,的确所有进程都陆续退出了,但是,唯独有那十几个进程,每次都是在其他所有进程结束后都又过了十几秒才开始陆续退出。
在 vendor/laravel/framework/src/illuminate/queue/worker.php 给信号处理、标记退出 flag 、while popjob 等几处,挨个打了个日志。
根据日志结果,也确实证明这十几个进程确实是压根儿没收到 term 信号,在其他进程都退出完成后的十几秒后,才收到了来自 supervisor 的 term 信号。
没啥排查思路了...
(所有 program section 都有 stopasgroup)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.