5

Linuxターゲット用にCで記述しているFastCGIアプリケーションを生成および管理するためにsupervisordを使用しています。SIGINTを受信したときにアプリケーションを正常に終了するシグナルハンドラーがあります。ターミナルウィンドウでアプリを実行し、Ctrl-Cを発行して終了することで、シグナルハンドラーが希望どおりに機能することを確認しました。

(supervisorctlを介して)supervisordに「shutdown」コマンドを発行すると、supervisordはSIGKILLを呼び出さずにアプリを強制的に終了できないようです。

2010-08-20 10:02:49,661 INFO waiting for cse to die
2010-08-20 10:02:52,665 INFO waiting for cse to die
2010-08-20 10:02:55,669 INFO waiting for cse to die
2010-08-20 10:02:58,672 INFO waiting for cse to die
2010-08-20 10:02:59,673 WARN killing 'cse' (2031) with SIGKILL
2010-08-20 10:02:59,674 INFO stopped: cse (terminated by SIGKILL)

私のsupervisord.confファイルには次のものがあります

stopsignal=INT

私は、shutdownコマンドの呼び出し時にsupervisordが「stopsignal」を発行することを前提としているため、INFOステートメントは、私のアプリがsupervisordによって発行されたSIGINTに応答していないことを示しています。

監視対象とアプリの間を通過する信号をデバッグするにはどうすればよいですか?

4

3 に答える 3

5

さらに掘り下げた後、問題は、監視対象が子プロセスにシグナルを渡せなかったことではないようです。これは正常に機能しているようです。

むしろ、supervisordは、stopsignalを呼び出す要求を受信すると、子プロセスstderr出力のログ記録を停止するように見えます。その結果、子プロセスのシャットダウンのstderrベースのロギングは、監視対象によって処理されません。私の場合、シグナルが呼び出された後、子プロセスはstderrに何もログに記録していなかったため、子プロセスはSIGINTを受信して​​いないように見えました。

于 2010-08-31T15:14:34.363 に答える
3

これは、このコミットに従ってスーパーバイザーの3.0a10(2011-03-30)リリースで修正されたバグでした:https ://github.com/Supervisor/supervisor/commit/e19cbc185dfad045c8775750d36ab8ceed4c4dfb

于 2012-09-06T20:14:27.377 に答える
3

コマンドラインでdebugモードでsupervisordを実行して、詳細情報を取得できます。

監視対象-n-eデバッグ

于 2010-08-23T19:40:30.640 に答える