Laravel Forge: Как остановить работников очереди? - PullRequest
0 голосов
/ 02 июня 2018

Я настроил работника очереди в качестве демона в Forge, затем использовал рекомендованную команду сценария развертывания (php artisan queue:restart).

Как вручную остановить и перезапустить работника очереди?Если я остановлю это, супервизор просто перезапустит его.Нужно ли сначала убивать активного работника в Кузнице?

Это может потребоваться на разовой основе.Например, если я хочу очистить файл журнала, у которого есть открытая очередь.

1 Ответ

0 голосов
/ 02 июня 2018

Я довольно открыто высказывался в обсуждениях развертывания, и я всегда говорю людям, чтобы они останавливали свои рабочие процессы с помощью команды supervisorctl.

supervisorctl stop <name of task>

Использование команды queue:restart фактически ничего не перезапускает.Он устанавливает запись в кеш, которую рабочий процесс проверяет и завершает работу.Как вы заметили, супервизор затем перезапустит процесс.

Это означает, что у queue:restart есть одна огромная проблема - игнорирование именования и тот факт, что он не перезапускается;это приведет к перезапуску всех рабочих процессов на всех серверах, которые используют один и тот же кеш.Я думаю, что это неправильно, я думаю, что развертывание должно влиять только на текущий сервер, на котором в данный момент выполняется развертывание.

Если вы используете кеш на сервер, например, драйвер кеша file, то это имеет другойпроблема;что произойдет, если ваша установка полностью удалит папку сайта?Кэш-память изменилась бы, очереди запустились бы снова, и рабочий процесс мог бы иметь смесь старого и нового кода.Забавные вещи для отладки ...

Supervisor будет сигнализировать процессу, когда он завершает работу, и ждать, пока он завершит работу, и, если это не произойдет, принудительно убить его.Эти тайм-ауты можно настроить в файле конфигурации супервизора.Это означает, что использование supervisorctl для остановки процесса очереди не приведет к завершению каких-либо заданий «на полпути», все они будут выполнены (при условии, что они выполняются в течение достаточно короткого времени, или вы увеличиваете время ожидания).

...