Как использовать супервизор для запуска/остановки приложения 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

person Bdfy    schedule 22.10.2013    source источник


Ответы (4)


По умолчанию супервизор отправляет SIGTERM при остановке. SIGTERM в uWSGI означает «грубая перезагрузка».

Вы должны изменить его на QUIT или INT:

стопсигнал=ВЫЙТИ

должно быть достаточно

Другой подход (не рекомендуется) — добавить --die-on-term в командную строку uWSGI, чтобы изменить его поведение по умолчанию.

person roberto    schedule 22.10.2013
comment
почему обескуражено? - person Guillaume Vincent; 14.01.2014
comment
Потому что вам нужна эта опция, только если вы используете супервизора. Поведение супервизора лучше исправить в конфиге супервизора. - person Raz; 04.04.2014
comment
У меня мало опыта работы с любым из методов, но когда я искал правильную конфигурацию для использования, я нашел несколько примеров проблем, которые, по-видимому, были решены только с помощью die-on-term, например stackoverflow.com/a/22213404/202168 github.com/unbit /uwsgi/issues/296 - person Anentropic; 05.12.2014

  1. файл конфигурации руководителя проекта
    #P1#
  2. файл конфигурации uwsgi проекта
    #P2#
person Color    schedule 28.12.2015
comment
Отличный совет. При включенной демонизации в uwsgi при управлении с помощью меча я обнаружил, что ОС будет работать с памятью и выдавать эту ошибку: [Errno 12] Cannot allocate memory - person run_the_race; 15.03.2019

Если вы используете «processes = #» в своей конфигурации uwsgi, вы также должны использовать «master = true». Если нет, супервайзер убьет только одного из рабочих.

Потом:

/etc/supervisor/conf.d/app.conf

stopsignal = QUIT

/etc/uwsgi/app.ini

processes = 4
master = true
person estevo    schedule 13.07.2016
comment
Я использовал stopsignal = QUIT, но после его остановки в supervisorctl некоторые новые процессы uwsgi были созданы с помощью pid 1. stopsignal=INT выполняет функцию остановки. - person Kyan; 30.11.2017

Если вы используете свой UWSGI с мастером и рабочими, вам нужно добавить в свой файл /etc/supervisor/conf.d/app.conf

stopasgroup=false
killasgroup=false

иначе, независимо от того, что uwsgi остановит, появится больше мастеров, а также рабочих.

person Kunal Mawar    schedule 24.04.2018
comment
Это конфигурация по умолчанию. Я мог заставить supervisorctl restart process работать правильно, только установив для обоих параметров значение true. - person Maximiliano Guerra; 06.08.2020