0

スーパーバイザーを介して schroot セッション内で Gunicorn サーバーを実行しています。私の問題は、「supervisorctl stop」でサービスを停止すると、サービスが完全に停止しないことです。

これは私のサーバーを制御するスクリプト (簡略化) で、フォアグラウンドで gunicorn を実行します。

# gunicorn.sh
schroot -c gunicorn -r -- bash -c "gunicorn --workers=1 myapp.wsgi:application" 

これは、このスクリプトを実行するための私のスーパーバイザー構成です:

[program:gunicorn]
command=/home/test/gunicorn.sh
stderr_logfile=/var/log/gunicorn.err.log
stdout_logfile=/var/log/gunicorn.out.log 

"supervisorctl start" でサービスを開始すると、プロセス ツリーは次のようになります。

supervisord(7175)---gunicorn.sh(8061)---schroot(8067)---gunicorn(8068)---gunicorn(8073)---{gunicorn}(8078)

「supervisorctl stop」でサービスを停止すると、対応するスーパーバイザー プロセスとその直接の子である gunicorn.sh が終了します。しかし、schroot プロセス自体は存続し続け、現在は init プロセスの子になっています。

schroot(8067)---gunicorn(8068)---gunicorn(8073)---{gunicorn}(8078)

この動作全体は、schroot と gunicorn の両方の動作に関連しているようです。

スーパーバイザーに schroot でホストされているプロセスを正しく停止させるにはどうすればよいですか?

4

2 に答える 2

0

execでgunicornを開始する必要がありました:

# gunicorn.sh
exec schroot -c gunicorn -r -- bash -c "gunicorn --workers=1 myapp.wsgi:application"
于 2014-12-17T19:57:59.630 に答える