スーパーバイザーを使用して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
デフォルトでは、スーパーバイザーは停止時にSIGTERMを送信します。 uWSGIのSIGTERMは、「残忍なリロード」を意味します。
QUITまたはINTに変更する必要があります。
stopsignal = QUIT
十分なはずです
別のアプローチ(非推奨)は、uWSGIコマンドラインに--die-on-termを追加して、デフォルトの動作を変更することです。
追加
stopsignal=INT
削除する
daemonize=xxx.log
デーモンモードを無効にする
Uwsgi構成で「processes =#」を使用する場合は、「master = true」も使用する必要があります。そうでない場合、監督者は労働者の1人だけを殺します。
次に:
/etc/supervisor/conf.d/app.conf
stopsignal = QUIT
/etc/uwsgi/app.ini
processes = 4
master = true
マスターとワーカーを使用してUWSGIを実行している場合は、/etc/supervisor/conf.d/app.conf
ファイルに追加する必要があります
stopasgroup=false
killasgroup=false
そうでなければ、uwsgiを停止すると、より多くのマスターが生成され、ワーカーも生成されます。