У меня такая конфигурация монитора:
check process unicorn
with pidfile /tmp/pids/unicorn.0.pid
start program = "/etc/init.d/unicorn start"
stop program = "/etc/init.d/unicorn stop"
restart program = "/etc/init.d/unicorn reload"
if mem is greater than 250.0 MB for 2 cycles then restart
if cpu is greater than 22% for 3 cycles then alert
if cpu is greater than 25% for 2 cycles then restart
Но похоже, что всякий раз, когда monit пытается перезагрузить приложение (например, из-за памяти> 250 МБ), он выдает остановку, а затем запуск, вместо того, чтобы использовать программу перезапуска. Есть ли способ указать monit выполнить перезагрузку вместо этого? Так как выдача остановки и запуска приводит к тому, что сайт на какое-то время отключается.
Я вижу ту же проблему, о которой вы сообщили. Я не знаю, почему «программа перезапуска» не используется для перезапуска. Однако я использую обходной путь:
check process unicorn
with pidfile /tmp/pids/unicorn.0.pid
start program = "/etc/init.d/unicorn start"
stop program = "/etc/init.d/unicorn stop"
if mem is greater than 250.0 MB for 2 cycles then restart
if cpu is greater than 22% for 3 cycles then alert
if cpu is greater than 25% for 2 cycles then exec "/etc/init.d/unicorn reload"
Обратите внимание, что я оставил проверку if mem, чтобы она выполняла остановку / запуск. Это потому, что я предполагаю, что перезагрузка, вероятно, не поможет, если у вас есть утечка памяти, поэтому, вероятно, потребуется остановка / запуск. Но настройте, как считаете нужным.
Если не копаться в исходном коде monit и исправлять его (или устанавливать более новую версию и выяснять, исправлена ли она), это, вероятно, ваш лучший вариант.
Какую версию monit вы используете?
синтаксис для перезапуска кажется допустимым
вы проверяли веб-интерфейс, чтобы убедиться, что конфигурация анализируется как обслуживаемая?
в документации говорится
RESTART перезапускает службу и отправляет предупреждение. Перезапуск выполняется путем вызова зарегистрированного метода перезапуска службы или сначала вызывая метод остановки, а затем метод запуска, если перезапуск не установлен.
Метод, который Monit использует для перезапуска, состоит в том, чтобы сначала выполнить программу остановки, затем подождать (до 30 с), пока процесс остановится, а затем выполнить программу запуска и подождать (30 с) ее запуска.