Назад | Перейти на главную страницу

Monit не перезапускает процесс

у меня есть monit чтобы контролировать процесс, но он не понимает, что он не работает. Моя конфигурация монитора такова:

 check process xxx with pidfile /var/run/xxx.pid
 group yyy
 start program = "/etc/init.d/xxx start"
 stop program = "/etc/init.d/xxx stop"
 if failed host 127.0.0.1 port 9999  then restart
 if 5 restarts within 5 cycles then timeout

Проблема в том, что файл PID все еще существует, даже если мой процесс упал. Итак ... PID существует, но порт 9999 в localhost должен выйти из строя. Итак ... ожидается ли, что monit не перезапустит этот процесс? Надо обязательно удалить файл pid? Не могу сделать такой OR?

Заранее спасибо,

Поправьте меня, если я ошибаюсь:

  • при сбое программы файл PID остается, но порт 9999 закрывается
  • если программа останавливается чисто, файл PID удаляется, а порт 9999 закрывается

Обычное поведение - порт 9999. Вы можете просто отслеживать это, используя что-то вроде этого:

check host 127.0.0.1 with address 127.0.0.1
  start program = "/etc/init.d/xxx restart"
  stop program = "/etc/init.d/xxx stop"
  if failed port 9999 then restart

Вышеупомянутого должно быть достаточно, чтобы охватить все случаи, но вы можете добавить его в качестве дополнительного оператора к существующему (это будет своего рода OR вы о чем говорите).

Взгляните на документ относительно хоста проверки.

PS: Думаю, по поводу документа (образец про Apache), что имеющаяся у вас конфигурация должна иметь возможность перезапустить процесс, если порт 9999 недоступен, даже если файл PID все еще существует. Я предполагаю, что порт 9999 не закрыт или порт 9999 не прослушивает 127.0.0.1 (проверьте все это, используя netstat).

Итак, в вашей конфигурации попробуйте заменить строку монитора порта на эту:

if failed port 9999 then restart (удаление host 127.0.0.1).