Supervisorのプロセス停止設定
- 2022年5月10日
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) ・・・・
今度は、止まる様になった。