Чтобы обрабатывать большое количество заданий, я запускаю переменное число рабочих очередей в зависимости от того, какая работа должна завершиться. Я не хочу запускать больше рабочих, чем необходимо для завершения работы, которая должна быть выполнена за определенный промежуток времени, который мы считаем подходящим.
На данный момент я запускаю 5 рабочих очереди демонов для тестирования, однако в производстве это число может составлять от 25 до 100 рабочих, возможно, больше. Я понимаю, что при развертывании мне приходится останавливать рабочих очередей, сначала помещая структуру в режим обслуживания, используя php artisan down
, потому что флаг --daemon
заставляет фреймворк загружаться только тогда, когда рабочий запускается, следовательно, новый код не будет влияют на развертывание, пока рабочий не перезагрузится.
Если мне почему-то нужно было прекратить работу, я мог бы поместить приложение в режим обслуживания с помощью php artisan down
, который заставит рабочих умереть, как только они закончат обработку своего текущего задания (если они работают). Однако могут быть случаи, когда я хочу убить рабочих, не помещая все приложение в режим обслуживания.
Есть ли безопасный способ остановить работников таким образом, чтобы они продолжали обрабатывать свое текущее задание, а затем умереть, не помещая все приложение в режим обслуживания?
По существу, мне нужен php artisan queue:stop
, который ведет себя как php artisan queue:restart
, но не перезагружает рабочего после выполнения задания.
Я делал вывод, чтобы это было как команда php artisan queue:stop
, которая сделала бы это, но это, похоже, не так.
Используя ps aux | grep php
, я могу получить идентификатор процесса для рабочих, и я мог бы убить процессы таким образом, но я не хочу убивать процесс в середине работы, работая над заданием.
Спасибо.