При разработке встраиваемых систем обычно ставится задача перезапуска приложения при его падении. Для этой цели удобно использовать систему мониторинга monit.
Рассмотрим пример конфигурационного файла:
set daemon 5
set logfile syslog
set httpd port 2812
allow localhost
# -------------------- Check services -------------------------------
check display-server with pidfile /var/run/display_server.pid
start program = "/etc/init.d/display-server start"
stop program = "/etc/init.d/display-server stop"
check keyboard-server with pidfile /var/run/keyboard_server.pid
start program = "/etc/init.d/keyboard-server start"
stop program = "/etc/init.d/keyboard=server stop"
# -------------------- Check free space -----------------------------
check device varlog with path /var
if space usage > 80 % then
exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'"
Настройки демона monit
set daemon - интервал с которым будет вызываться демон monit в секундах
set logfile syslog - имя лог файла, куда monit будет писать свои сообщения (можно указать syslog, а можно полный путь до файла)
set httpd port 2812 - поднимает web сервер, который вешается на указанный порт. По этому порту через http можно получать данные о состоянии системы. Команда 'monit status' также использует этот порт для вывода состояния системы.
allow localhost - хосты, которым будет выдаваться состояние системы
Мониторинг сервисов
check display-server with pidfile /var/run/display_server.pid - проверка состояния сервиса по указанному pid файлу. Имя сервиса в monit может не соответствовать имени реального сервиса
start program = "/etc/init.d/display-server start" - команда которая будет выполнена если указанный сервис завершит свою работу
stop program = "/etc/init.d/display-server start" - stop команда нужна для корректного перезапуска сервиса. Без нее monit его не перезапустит
Мониторинг свободного места на диске
check device varlog with path /var - проверка состояния устройства, смонтированного по указанному пути. Это может быть, например, раздел жесткого диска или флэш-диск
if space usage > 80 % then - проверяемое условие. В данном случае если занят объем больше 80% общей емкости
exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'" - команда, выполняемая если условие истинно
Замечания
1. Все имена сервисов и дисков, указанные в конфигурационном файле сохраняются после остановки сервиса monit.
Если при выполнении команды на заданное условие возникла ошибка (код завершения не 0), то данное имя сервиса или диска больше не будет корректно обрабатываться. Чтобы решить эту проблему, необходимо изменить это имя и перезапустить monit. После этого имя можно вернуть на прежнее и снова перезапустить monit.
2. Для monit важен сам факт наличия строчки 'stop program' для перезапуска сервиса. Указанную команду при перезапуске он не выполняет.
3. Для просмотра данных о состоянии локальной системы можно воспользоваться командой
monit status
Ссылки
1. Информация по настройке
http://mmonit.com/monit/documentation/monit.html
http://www.thegeekstuff.com/2010/11/monit-install-config
2. Примеры конфигурационных файлов
http://mmonit.com/wiki/Monit/ConfigurationExamples
Рассмотрим пример конфигурационного файла:
set daemon 5
set logfile syslog
set httpd port 2812
allow localhost
# -------------------- Check services -------------------------------
check display-server with pidfile /var/run/display_server.pid
start program = "/etc/init.d/display-server start"
stop program = "/etc/init.d/display-server stop"
check keyboard-server with pidfile /var/run/keyboard_server.pid
start program = "/etc/init.d/keyboard-server start"
stop program = "/etc/init.d/keyboard=server stop"
# -------------------- Check free space -----------------------------
check device varlog with path /var
if space usage > 80 % then
exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'"
Настройки демона monit
set daemon - интервал с которым будет вызываться демон monit в секундах
set logfile syslog - имя лог файла, куда monit будет писать свои сообщения (можно указать syslog, а можно полный путь до файла)
set httpd port 2812 - поднимает web сервер, который вешается на указанный порт. По этому порту через http можно получать данные о состоянии системы. Команда 'monit status' также использует этот порт для вывода состояния системы.
allow localhost - хосты, которым будет выдаваться состояние системы
Мониторинг сервисов
check display-server with pidfile /var/run/display_server.pid - проверка состояния сервиса по указанному pid файлу. Имя сервиса в monit может не соответствовать имени реального сервиса
start program = "/etc/init.d/display-server start" - команда которая будет выполнена если указанный сервис завершит свою работу
stop program = "/etc/init.d/display-server start" - stop команда нужна для корректного перезапуска сервиса. Без нее monit его не перезапустит
Мониторинг свободного места на диске
check device varlog with path /var - проверка состояния устройства, смонтированного по указанному пути. Это может быть, например, раздел жесткого диска или флэш-диск
if space usage > 80 % then - проверяемое условие. В данном случае если занят объем больше 80% общей емкости
exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'" - команда, выполняемая если условие истинно
Замечания
1. Все имена сервисов и дисков, указанные в конфигурационном файле сохраняются после остановки сервиса monit.
Если при выполнении команды на заданное условие возникла ошибка (код завершения не 0), то данное имя сервиса или диска больше не будет корректно обрабатываться. Чтобы решить эту проблему, необходимо изменить это имя и перезапустить monit. После этого имя можно вернуть на прежнее и снова перезапустить monit.
2. Для monit важен сам факт наличия строчки 'stop program' для перезапуска сервиса. Указанную команду при перезапуске он не выполняет.
3. Для просмотра данных о состоянии локальной системы можно воспользоваться командой
monit status
Ссылки
1. Информация по настройке
http://mmonit.com/monit/documentation/monit.html
http://www.thegeekstuff.com/2010/11/monit-install-config
2. Примеры конфигурационных файлов
http://mmonit.com/wiki/Monit/ConfigurationExamples
Комментариев нет:
Отправить комментарий