7

私はトルネードを使用してフラスコアプリを実行しています.少し作業をしてからアプリを実行するシェルスクリプトがあります.

#!/usr/bin/env bash
some_work
more_work
python /usr/share/theapp/theapp.py

私はスーパーバイザーを使用して、この小さなスクリプトを管理しています。起動は問題なく動作しますsudo supervisorctl start theapp.shが ( )、再起動しようとすると、python サブプロセスが終了せずにハングアップし、ポートが占有され、再起動が妨げられます。スクリプトがスーパーバイザーによって停止されたときに Python コードが実際に停止されるようにトラップを追加しようとしましたが、これは機能しませんでした。gevent の wsgi サーバーのトルネードを切り替えてみましたが、同じ問題がありました。この小さなスクリプトをどのように実行すればよいですか?

4

3 に答える 3

8

TERM シグナルは bash スクリプトにのみ送信さtheapp.shれ、python プロセスによって受信されることはありません。スーパーバイザー構成のプログラム セクションでオプションを試すことができstopasgroupます。これは、bash (および他のシェル) がシグナルを処理する方法とより互換性があります [1]。

[1] http://www.vidarholen.net/contents/blog/?p=34

于 2013-03-12T19:03:44.577 に答える
0

私はsupervisordとuwsgiで同様の問題を抱えていましたが、Tornadoでも有効かもしれません. 問題は、Tornado サービスが再起動を予期している信号にあります。Supervisord が送信するデフォルトのシグナルは SIG_TERM です ( docs の stopsignal を参照)。Tornado が何を期待しているのかはわかりませんが、次のように、supervisord 設定でさらにいくつかのオプションを試すことができます。

# /etc/supervisor.d/myprogram.ini
# http://supervisord.org/configuration.html#program-x-section-values
[program:myprogram]
command=/path/to/script/
....
stopsignal=INT

また

stopsignal=HUP
于 2012-07-07T13:28:08.043 に答える