Как использовать супервизор для запуска/остановки приложения uWSGI?
Я использую диспетчер для запуска приложения uWSGI. Почему приложение uWSGI не всегда останавливается после диспетчера остановки?
Конфигурация супервизора:
[program:test]
autostart = true
user=root
command=uwsgi --master --workers 5 --disable-logging --socket 127.0.0.1:8888
--module web --callable app
priority=1
redirect_stderr=true
stdout_logfile = /data/log
Ответы
Ответ 1
По умолчанию супервизор отправляет SIGTERM на остановке. SIGTERM в uWSGI означает "жестокая перезагрузка".
Вы должны изменить его на QUIT или INT:
stopsignal = QUIT
должно быть достаточно
Другой подход (обескураженный) заключается в добавлении --die-on-term в командную строку uWSGI для изменения поведения по умолчанию
Ответ 2
Если вы используете "процессы = #" в настройке uwsgi, вы также должны использовать "master = true". Если нет, супервизор только убьет одного из рабочих.
Тогда:
/etc/supervisor/conf.d/app.conf
stopsignal = QUIT
/etc/uwsgi/app.ini
processes = 4
master = true
Ответ 3
- файл конфигурации супервизора проекта
добавить stopsignal=INT
- файл конфигурации uwsgi проекта
удалите daemonize=xxx.log
, чтобы отключить режим демона