у меня есть 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
?
Заранее спасибо,
Поправьте меня, если я ошибаюсь:
Обычное поведение - порт 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
).