問題タブ [process-monitor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 孫プロセスの監督監視
スクリプトrun-xyzによって開始されるサービスxyzがあります [このスクリプトには、サービスxyzを開始する前に、アクティベーション前の一連の手順があります]
私の目標は、プロセスxyzを監視することです。そのため、次の構成で Supervisord を使用しています。
スクリプトrun-xyzは、サービスxyzを起動し、プロセスxyzが存在するかどうかをチェックする無限ループを持っています。[たとえば、xyzのプロセス ID のSIGKILLでは、無限ループから抜け出し、スクリプトの実行が停止し、supervisord が自動的に再起動した後、正常に戻ります][program:xyz]
ただし、何らかの理由でrun-xyzプロセスが強制終了された場合、 xyzサービスは親プロセス ID が1の孤児になります。Supervisord は再起動します[program:xyz]
が、 xyzが既に実行されており、スクリプトrun-xyzxyz
が終了するため、強制終了して再起動しないでください。これにより、最終的に乗り越えてFATAL状態に達し、supervisord が監視しなくなります。start-retries
[program:xyz]
[program:xyz]
次の質問があります。
- 親プロセス ID が1で実行されているxyzが見つかった場合、シナリオでrun-xyzがxyzの親プロセス ID としてアタッチする方法はありますか?
- Supervisord はxyz pid を監視し、xyz pidが存在しなく
[program:xyz]
なったときに再起動できます。run-xyzが実行されているかどうかは気にしません。これは、 xyzを開始することだけが仕事であるためです。[ pidproxyルートを試しましたが、機能しませんでした。以下で説明します] - 私たちが達成しようとしていることに対して、supervisord は正しい選択ですか?
pidproxyを使用すると、構成は次のようになりました。
上記の構成を使用する場合、 run-xyzでxyzを起動し、数秒間 (30) スリープして終了する無限ループを削除しました。しかし、スーパーバイザーは待機していません。run-xyzが終了し、再び起動しようとすると、再試行が終了してFATAL状態になるまでこれが発生します。注:/path/to/xyz.pid
が存在し、pid がファイルに書き込まれます。