Supervisorのプロセス停止設定

2022/03 の作業


supervisorctl shutdown で supervisor を止めた時、uwsgi のプロセスも一緒に止まってほしいけど、止まらない時がある。

というか、プロセスが再起動されている感じがする。

supervisor の設定ファイルに停止する時の設定値 stopsignal があるが、今は未設定。

stopsignal が未設定の場合は、SIGTERM を送るらしい。


なので、まず、wsgi 単独で SIGTERM を送って試してみる。

(work_venv) $ uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini &
(work_venv) $ ps -ef | grep wsgi
work_user  4213  3746  0 13:52 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
work_user  4214  4213  0 13:52 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
work_user  4215  4213  0 13:52 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini

(work_venv) $ kill -TERM 4213
...brutally killing workers...
worker 1 buried after 1 seconds
worker 2 buried after 1 seconds
binary reloading uWSGI...
・・・・
*** uWSGI is running in multiple interpreter mode ***
gracefully (RE)spawned uWSGI master process (pid: 4213)
spawned uWSGI worker 1 (pid: 4283, cores: 2)
spawned uWSGI worker 2 (pid: 4284, cores: 2)

(work_venv) $ ps -ef | grep uwsgi
work_user  4213  3746  0 13:52 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
work_user  4283  4213  0 14:02 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
work_user  4284  4213  0 14:02 pts/0    00:00:00 uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini


ワーカープロセスが再起動してきた。

SIGTERM は残忍なやり口で、マスタ、ワーカープロセスをリロードするらしい。

SIGINT と SIGQUIT が終了らしい。

今度は、SIGINT で試してみる。

(work_venv) $ kill -INT 4213
SIGINT/SIGTERM received...killing workers...
worker 1 buried after 1 seconds
worker 2 buried after 1 seconds
goodbye to uWSGI.

[1]+  Done                    uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini

止まった。

なので、supervisor の uwsgi を起動しているセクションに stopsignal を追加して確認。

$ sudo vi /etc/supervisor/supervisord.d/worksite.ini
・・・・
; 停止のシグナル
stopsignal = INT

$ sudo systemctl start supervisord.service
$ sudo systemctl status supervisord.service
● supervisord.service - Supervisor process control system for UNIX
   Loaded: loaded (/etc/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-03-24 14:20:30 JST; 33s ago
     Docs: http://supervisord.org
  Process: 3728 ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS)
 Main PID: 4521 (supervisord)
   CGroup: /system.slice/supervisord.service
           4521 /usr/local/bin/python3.9 /usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
           4523 /home/work_user/work_venv/bin/uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
           4524 /home/work_user/work_venv/bin/uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini
           4525 /home/work_user/work_venv/bin/uwsgi --socket :8001 --ini /home/work_user/worksite/uwsgi.ini

Mar 24 14:20:30 ip-172-1-1-1.us-east-2.compute.internal systemd[1]: Started Supervisor process control system for UNIX.

$ sudo systemctl stop supervisord.service
$ sudo systemctl status supervisord.service
● supervisord.service - Supervisor process control system for UNIX
   Loaded: loaded (/etc/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Thu 2022-03-24 14:21:41 JST; 3s ago
     Docs: http://supervisord.org
  Process: 4569 ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS)
  Process: 4521 ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf (code=exited, status=0/SUCCESS)
 Main PID: 4521 (code=exited, status=0/SUCCESS)
・・・・


今度は、止まる様になった。