私は持っていますmonit
CPU が多すぎると、ペアのプロセスを終了するように構成されますが、いずれかのプロセスが終了すると、オペレーティングシステムがプロセスを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を使用してこれを行うことができます。
- a
start program
とstop program
定義:別のプロセスマネージャを初期化システムとして使用する場合(macOSのように)、コマンドはプログラムを開始または停止するコマンドでなければならず、次に条件が発生したときにプロセスを再起動するようにmonitに指示する必要があります。通知を受け取るための条件です。 macOSでは、launchctl
再起動を処理するコマンドが必要です。これが好ましい「正しい」アプローチですが、launchctl
使用するのは少し不便です(誰も手動でサービスを再起動したくないと仮定しているようです)、お勧めしません。 exec
再起動をトリガーするスクリプトを作成し、条件付き操作でスクリプトパスを指定します。exec
actions は現在のバージョンの monit から暗黙的に警告を送信するため、この場合、警告条件を指定する必要はありません。あなたの場合、最初のサービスの「スクリプト」は次のようになります。#!/bin/bash /usr/bin/pkill -9 soaagent
そして2番目の同様のもの。必要な唯一のことは、サービスを再起動するために何とかlaunchdをトリガーすることです。独自に再起動する必要はありません。本質的に、このアプローチは上でやろうとしているように再起動をトリガするようにmonitに指示するだけであり、望ましい結果を得るために少しきれいな方法で行います。