Я довольно открыто высказывался в обсуждениях развертывания, и я всегда говорю людям, чтобы они останавливали свои рабочие процессы с помощью команды supervisorctl.
supervisorctl stop <name of task>
Использование команды queue:restart
фактически ничего не перезапускает.Он устанавливает запись в кеш, которую рабочий процесс проверяет и завершает работу.Как вы заметили, супервизор затем перезапустит процесс.
Это означает, что у queue:restart
есть одна огромная проблема - игнорирование именования и тот факт, что он не перезапускается;это приведет к перезапуску всех рабочих процессов на всех серверах, которые используют один и тот же кеш.Я думаю, что это неправильно, я думаю, что развертывание должно влиять только на текущий сервер, на котором в данный момент выполняется развертывание.
Если вы используете кеш на сервер, например, драйвер кеша file
, то это имеет другойпроблема;что произойдет, если ваша установка полностью удалит папку сайта?Кэш-память изменилась бы, очереди запустились бы снова, и рабочий процесс мог бы иметь смесь старого и нового кода.Забавные вещи для отладки ...
Supervisor будет сигнализировать процессу, когда он завершает работу, и ждать, пока он завершит работу, и, если это не произойдет, принудительно убить его.Эти тайм-ауты можно настроить в файле конфигурации супервизора.Это означает, что использование supervisorctl для остановки процесса очереди не приведет к завершению каких-либо заданий «на полпути», все они будут выполнены (при условии, что они выполняются в течение достаточно короткого времени, или вы увеличиваете время ожидания).