Linuxで2つのサービスを実行していて、それらA
をとと呼びますB
。それぞれが他方に依存しているため、一方がクラッシュして再起動した場合、もう一方はすぐに再起動する必要があります。
2つのサービスをそれぞれ起動して監視する監視プログラムを作成しましたが、プログラムはクラッシュしたときに1つのサービスを再起動できます。
モニタープログラムを改善して、一方のサービスがクラッシュしたことを検出すると、もう一方のサービスのPIDを取得して強制終了するようにします。
さまざまなイベントへの特定の応答をプログラムできる優れたソリューションがいくつかあります。
デーモンツール-http ://cr.yp.to/daemontools.html
upstart(ubuntuを使用する場合)-http: //upstart.ubuntu.com/
スーパーバイザー-http://supervisord.org/
監視プロセスは、fork(2)を使用して 2 つの子を生成しますよね? その場合、親は子の PID を取得し、それを各子の変数に保存できます。
両方のプロセスを生成した後、親モニターはループに留まり、 waitpid(2)呼び出しを待機することができます。適切なオプションを使用すると、子の 1 つが終了するまでこの呼び出しをブロックできます。終了すると、子の PID とその終了ステータスが返されます。これに基づいて、他の子でkill(2)を実行し、fork シーケンスを再実行して、両方の子の新しいインスタンスを生成できます。
2 番目の子を強制終了した後、次の waitpid 呼び出しは、新しい子のペアの 1 つではなく、その PID を返すことに注意してください。したがって、返された PID を現在の両方の子の PID と照合し、一致しない場合は無視する必要があります。