"monit restart <service>", как я узнаю, когда он перезапустится?

Наш sysadmin недавно переключился на использование monit, и теперь, когда я хочу перезапустить службу, я должен использовать "monit restart <servicename> " вместо "/etc/init.d/<servicename> перезагрузка".

Однако команда monit при успешном завершении не выводит результат и немедленно возвращается. Кажется, что на самом деле он не перезапускает до следующего цикла.

Я перезапускаю службу, потому что я внес изменения в нее. Я не хочу проверять свои изменения в отношении старого экземпляра. Поэтому мне нужно знать, когда перезапуск завершен. Я также предпочел бы, чтобы он перезапускал, когда я рассказываю об этом, а не когда он обходит его. Мне не нравится печатать "ps aux | grep <myservicename> " снова и снова, пока я жду.

Есть ли способ сделать monit немедленно перезапустить мой сервис?

Есть ли способ сделать monit или, возможно, оболочку вокруг monit, блокировать до завершения перезапуска?

Есть ли способ сделать monit сказать мне, что перезапуск был успешным, или что это не удалось?

Ответ 1

Monit - очень тихая программа! Фактически, команды monit имеют тенденцию работать и выходить немедленно, потому что они бегут в фоновом режиме! SO... используйте переключатель -v, если вы хотите увидеть, что делает Monit, и tail -f файл журнала и -I, если вы хотите, чтобы он выполнялся на переднем плане.

Синхронный перезапуск

Используйте параметр -I:

monit -I restart servicename

Это отключит перезапуск в фоновом режиме, например. необходимо, когда ваш компьютер загружается!

Если вы хотите диагностировать проблемы, добавьте подробный вариант -v:

monit -Iv restart servicename

Проверка состояния

Чтобы проверить результат, вы можете попробовать несколько вещей:

1) Возвращаемое значение monit

monit -I restart servicename
echo $?

Обычно $? должен быть равен нулю при успехе и не равен нулю в противном случае. Однако не поддерживаются программы, и нет информации о manpage, что означает статус выхода ($?) monit. Попробуйте протестировать его.

2) Используйте команды status или summary

monit -I status

или

monit -I status servicename

или

monit -I summary

эти команды вернут статус на выходе. Вы можете выбрать команду, которая лучше всего подходит для вас, и проанализировать ее вывод. Или, как в пункте 1), проверьте возвращаемое значение $? (оно не упоминается в man-странице).

Ответ 2

Можно запустить демонов monit, просто запустив monit. Это должно помочь уменьшить ожидание до следующего цикла.

Сделайте tail -f monit.log, чтобы убедиться, что перезапуск был успешным или если он потерпел неудачу.

Ответ 3

Вы всегда можете использовать что-то вроде этого

while test -f pidfile.pid && kill -0 $(cat pidfile.pid);
do 
  sleep 1; 
done;

while ! kill -0 $(cat pidfile.pid); 
do 
  sleep 1; 
done

этот script ждет, пока ваш процесс перезапускается.