プログラムを監視するためにmonitを使用しています。監視されているプログラムは、2 つの状況でクラッシュする可能性があります
- プログラムがランダムにクラッシュする可能性があります。再起動するしかない
- 悪い状態になり、その後起動するたびにクラッシュします
後者の状況を修正するために、プログラムを停止し、データ ファイルを消去して適切な状態にリセットし、再起動するスクリプトを作成しました。以下の構成を試しました
check process program with pidfile program.pid
start program = "programStart" as uid username and gid groupname
stop program = "programStop" as uid username and gid groupname
if 3 restarts within 20 cycles then exec "cleanProgramAndRestart" as uid username and gid groupname
if 6 restarts within 20 cycles then timeout
monit がプログラムを 3 サイクルで 3 回再起動するとします。3 回目の再起動後、cleanProgramAndRestartスクリプトが実行されます。しかし、cleanProgramAndRestart スクリプトが再びプログラムを再起動すると、次のサイクルで 3 回の再起動の条件が再び満たされ、無限ループになります。
誰でもこれを修正する方法を提案できますか?
以下のアクションのいずれかが可能な場合、回避策がある可能性があります。
- 「再起動」の代わりに「クラッシュ」キーワードがある場合、プログラムが 3 回再起動された後ではなく、3 回クラッシュした後にクリーン スクリプトを実行できます。
- 実行スクリプトの実行後に何らかの方法で「再起動」カウンターをリセットする方法がある場合
- 条件3の再起動の出力が変わった場合のみ何かを実行する方法があれば