Чтобы обработать большое количество заданий, я запускаю переменное количество обработчиков очереди в зависимости от того, сколько работы нужно выполнить. Я не хочу запускать больше воркеров, чем необходимо для завершения работы, которую необходимо выполнить за период времени, который мы считаем подходящим.
На данный момент я запускаю 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
, я могу получить идентификаторы процессов для рабочих, и я мог бы убить процессы таким образом, но я не хочу убивать процесс в середине его работы над заданием.
Спасибо.