Учитывая такую конфигурацию:
check host web1 address web1
if failed host web1 port 80 protocol http
then exec "/usr/local/bin/failover.sh -h web2"
Могу ли я определить, вернулся ли web1 из состояния сбоя, и выполнить действие «возврат после сбоя»?
Если бы я просто определял, работает ли он, то я бы запускал команду аварийного переключения каждые секунды демона, и я не хочу этого делать, если мне не нужно; он будет предоставлять ненужные записи в журнале и предупреждения.
Спасибо Эрику Пайло за его предложение которые приводят к рабочему ответу:
check host web1 address web1
if failed host web1 port 80 protocol http
then exec "/bin/bash -c '/usr/bin/test ! -f /var/tmp/web-failover && ( /usr/local/bin/failover.sh -h web2 ; touch /var/tmp/auth-failover )'"
else if succeeded
then exec "/bin/sh -c '/usr/local/bin/failover.sh -h web1 ; rm -f /var/tmp/web-failover)'"
Это странно, но если вы вызовете / bin / bash успешно, похоже, что monit не запустит команду. Я подозреваю, что он думает, что уже выполнил команду, поэтому не беспокоит. Однако, похоже, он не против запускать первую команду снова и снова!