数回失敗すると、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サービスの監視を停止するように構成する方法はありますか?
必要な間隔でmonit start servicename
を実行するcronジョブを使用するだけです。もちろん、グループを使用してより細かく制御することもできます。
いくつか掘り下げた後、Monitはシステム監視データを「状態」ファイルに保存していることがわかりました。また、この「状態」ファイルは、監視されている/監視されていないサービスを追跡します。
したがって、これは少し「力ずく」のようですが、確実に機能します。タイムアウトなどの理由でサービスが「監視されていない」場合は、次のようにシステムからMonit状態ファイルを削除します。
Sudo rm /var/lib/monit/state
そして、このようにMonitを再起動すると、すべてがうまくいくはずです。
Sudo service monit restart
Monitを再起動しても、タイムアウト後に監視を拒否するというまったく同じ問題がありました。最終的に、monit状態ファイルを削除する必要があることがわかりました(/var/.monit.state
)そしてmonitを再起動して、すべてのプログラムを再度監視するようにします。
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