プロセスが再開された後にプロセスを「監視」するようにモニタリングを設定するにはどうすればよいですか?

プロセスが再開された後にプロセスを「監視」するようにモニタリングを設定するにはどうすればよいですか?

私は持っていますmonitCPU が多すぎると、ペアのプロセスを終了するように構成されますが、いずれかのプロセスが終了すると、オペレーティングシステムがプロセスをmonit summary再起動しても、そのプロセスは「監視されていません」と報告されます。

プロセスが再開された後にプロセスを「監視」するようにモニタリングを設定するにはどうすればよいですか?


check process soagent
    matching "soagent"
    stop program = "/usr/bin/pkill -9 soagent"
    if cpu > 20% for 1 cycles then stop
    if cpu > 20% for 1 cycles then alert

check process callservicesd
    matching "callservicesd"
    stop program = "/usr/bin/pkill -9 callservicesd"
    if cpu > 20% for 1 cycles then stop
    if cpu > 20% for 1 cycles then alert 

macOS 10.13.4、モニタリング 5.25.2

答え1

問題は、プロセスを停止するように指示すると、プロセスの監視も停止することです。

この場合、最も簡単な解決策は、launchdにプロセスを再起動するように指示するスクリプトを書くことです(残念ながら、私はそれについて特に役に立ちません。私はmacOSについてはわかりません)。その後、各 A に対して monit で単一の条件を使用します。サービス構成は、次のようにスクリプトを実行します。

if cpu > 20% for 1 cycles then exec "/path/to/script"

このexecセクションはトリガー時に電子メール警告を送信し、スクリプトはプロセス/サービスを再起動するために実行され、監視を停止するように指示されていないため、monitは監視を継続します。

stop programこのアプローチをとると、サービスで実行されていない限り、この行は使用されないため、定義からその行を削除することもできます。monit stop

より明確に説明するために編集します。

Monitは、オペレーティングシステムがプロセス監督を処理しないと予想しています。つまり、プロセスを開始または停止する役割を担う唯一のサブジェクトであると仮定して、ユーザーが何かを停止するように指示するたびにそのプロセスを停止します。そして何も再起動しようとしないと仮定しているため、監視を停止します(したがって、LinuxでmacOSのlaunchdまたはsystemdで使用するのが少し痛い場合もあります)。

お客様の場合、処理能力が多すぎる場合はプロセスを再開し、そのような場合は通知を受け取ることをお勧めします。 2つの方法でmonitを使用してこれを行うことができます。

  1. astart programstop program定義:別のプロセスマネージャを初期化システムとして使用する場合(macOSのように)、コマンドはプログラムを開始または停止するコマンドでなければならず、次に条件が発生したときにプロセスを再起動するようにmonitに指示する必要があります。通知を受け取るための条件です。 macOSでは、launchctl再起動を処理するコマンドが必要です。これが好ましい「正しい」アプローチですが、launchctl使用するのは少し不便です(誰も手動でサービスを再起動したくないと仮定しているようです)、お勧めしません。
  2. exec再起動をトリガーするスクリプトを作成し、条件付き操作でスクリプトパスを指定します。execactions は現在のバージョンの monit から暗黙的に警告を送信するため、この場合、警告条件を指定する必要はありません。あなたの場合、最初のサービスの「スクリプト」は次のようになります。

    #!/bin/bash
    /usr/bin/pkill -9 soaagent
    

    そして2番目の同様のもの。必要な唯一のことは、サービスを再起動するために何とかlaunchdをトリガーすることです。独自に再起動する必要はありません。本質的に、このアプローチは上でやろうとしているように再起動をトリガするようにmonitに指示するだけであり、望ましい結果を得るために少しきれいな方法で行います。

関連情報