web-dev-qa-db-ja.com

Monitは、サービスを監視解除/タイムアウトしないように構成できますか?

数回失敗すると、Monitはサービスの再起動をあきらめ、監視を解除します。いつ、なぜの詳細については、ドキュメントに何も見つかりません。

私のMonitの設定は次のように設定されます:

set daemon 10
set logfile /var/log/monit.log
set statefile /var/lib/monit/monit.state
set alert [email protected] not { nonexist, action, instance }
include /etc/monit/conf.d/*

そして、これは私が使用しているMonitルールセットの例です。

check process myservice
  with pidfile /var/run/myservice/myservice.pid
  start program = "/home/myservice/current/start-myservice.sh"
    as uid myservice and gid myservice
  stop program = "/home/myservice/current/stop-myservice.sh"
    as uid myservice and gid myservice
  mode active

私の環境では、ポーリング間隔を無期限に試行し続けたいと思います。正常に起動しなくても、monitをneverサービスの監視を停止するように構成する方法はありますか?

7
Joe Shaw

必要な間隔でmonit start servicenameを実行するcronジョブを使用するだけです。もちろん、グループを使用してより細かく制御することもできます。

5
alexandrul

いくつか掘り下げた後、Monitはシステム監視データを「状態」ファイルに保存していることがわかりました。また、この「状態」ファイルは、監視されている/監視されていないサービスを追跡します。

したがって、これは少し「力ずく」のようですが、確実に機能します。タイムアウトなどの理由でサービスが「監視されていない」場合は、次のようにシステムからMonit状態ファイルを削除します。

Sudo rm /var/lib/monit/state

そして、このようにMonitを再起動すると、すべてがうまくいくはずです。

Sudo service monit restart
2
JakeGould

Monitを再起動しても、タイムアウト後に監視を拒否するというまったく同じ問題がありました。最終的に、monit状態ファイルを削除する必要があることがわかりました(/var/.monit.state)そしてmonitを再起動して、すべてのプログラムを再度監視するようにします。

2
sam

Monitコードスニペットに基づくと、プロセススタンザにサイクルステートメントを変更または追加する必要があるようです。 関連ドキュメントはこちら および こちら を参照してください。

タイムアウトステートメントなしですべてのサイクルを実行するようにサービステストを設定したいようです。また、monitのホームページを見てください http:// hostname:2812. Check the page for the relevant service and look at「存在」フィールド。デフォルトは次のようになります。

If doesn't exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert
1
ewwhite