Monitord: Автоматический перезапуск демона

freebsd2В мире постоянно работающих систем с «слушающими» отзывчивыми демонами, бывает, случается неприятность — в силу каких-либо причин демон перестает быть отзывчивым и прекращает свою работу. В итоге получаем неработающий сервис. Неприятность может застать нас в любое время и в любом месте. И даже если предусмотрительно настроенная нами система мониторинга шлет  об этом тревожные письма и смс, побуждая к вполне закономерным действиям — сделать сервису start и разбираться, что случилось, — не всегда есть для того возможности. Банально, может не быть никаких «электронно-вычислительных машин» под рукой.

Делаем выводы с вышесказанного и решаем, что нужно «что-то», что будет следить за демонами и стартовать их автоматически, если те прикажут долго жить*. Кто-то для таких целей пишет свой скрипт и кидает его в cron, кто-то пользуется готовыми решениями, настраивая их под себя. Одним из таких решений и есть monitord — не самое лучшее, корявое, но, на мой взгляд, самое простое и лично мне подходящее.

 

Установка

На текущую дату — 07.04.2015 — порт monitord помечен как Broken:

# cd /usr/ports/sysutils/monitord
# make config
===> No options to configure

# make install
===> monitord-0.4.1_3 is marked as broken: No public distfiles.
*** Error code 1

Stop.
make: stopped in /usr/ports/sysutils/monitord

Игнорируем этот факт и все-таки устанавливаем порт (запускаем make с ключом -D, устанавливая переменную NO_IGNORE):

# make -DNO_IGNORE install clean

...

=============================================================
Monitord requires procfs(5). Add this line to your fstab(5):
proc /proc procfs rw 0 0
=============================================================

===>  Cleaning for monitord-0.4.1_3

 

После установки в системе появляются 3 файла:

  • /usr/local/etc/rc.d/monitord — стартовый скрипт;
  • /usr/local/sbin/monitord — бинарник;
  • /usr/local/etc/monitord.conf.sample — пример конфигурационного файла.

 

Структура конфигурационного файла

/usr/local/etc/monitord.conf.sample:

############################################################################
############################################################################
##
## Monitord Configuration file
##
############################################################################
############################################################################

# You MUST set your email address and the email server to use when sending
# out notices. It will be used if you use the "alert" option below.

email = this@is.your.email.address
smtp-server = this@is.your.email.server

# When specifying options, make sure that they are comma-separated and do NOT
# have any spaces.
#
# user options delay service start script parameters

#root auto,alert 10 inetd   /usr/sbin/inetd -wW
#root auto       10 syslogd /usr/sbin/syslogd
#root auto       10 cron    /usr/sbin/cron
#root auto       20 httpd   /usr/local/etc/rc.d/apache.sh
#root auto,alert 10 sshd    /usr/local/sbin/sshd

 

Одна строка в conf-файле отвечает за один сервис, и поделена на 6 столбцов:

  • user — от имени какого пользователя производить запуск;
  • options — как реагировать, если сервис потух:

auto —  запускать сервис автоматически;
alert — отсылать письмо на почту об инциденте (здесь у меня возникли проблемы, ниже опишу какие);
noauto — не запускать сервис автоматически (имеет смысл при указании этой опции вместе с опцией alert — т.е. просто для уведомлений);

опции указываются через запятую, пробелы между ними не ставим.

  • delay — задержка запуска (секунды);
  • service — имя сервиса;
  • script — скрипт запуска сервиса;
  • parameters — аргументы, передаваемые скрипту запуска.

 

Настройка и запуск

Создаем или копируем с monitord.conf.sample конфигурацинный файл monitord.conf:

# cd /usr/local/etc/
# cp monitord.conf.sample monitord.conf
# ee monitord.conf

Например, для мониторинга apache24, по образу и подобию добавляем строку:

root auto 10 httpd    /usr/local/sbin/apache24 start

Добавляем monitord в автозагрузку и запускаем:

# ee /etc/rc.conf

# MONITORD
monitord_enable="YES"

# /usr/local/etc/rc.d/monitord start

 

Проблемы с отправкой уведомлений

При использовании опции alert необходимо предварительно указать, через что эти алерты слать. Monitord предлагает указать только email получателя и MTA, который доставит alert-письмо этому получателю:

email = admin@provoip.in.ua
smtp-server = mx.provoip.in.ua

К сожалению, править какие-то другие заголовки для отправки уведомлений нельзя. И если уже с неменяемой темой и телом пиcьма смириться можно, то критично важно было бы отредактировать адрес отправителя, потому как сам Monitord туда подставляет следующее:

monitord-notification@www, где www — это у меня имя хоста.

А мой МТА настроен на проверку адреса-отправителя и получив от monitord такое вот письмо, отказывается его дальше передавать:

sender verify fail for <monitord-notification@www>: Unrouteable address

Лично для меня это не критично, поскольку уведомлениями занимается нагиос. Alert’ы я отключаю и пользуюсь только возможностью слежки за демонами и их автоматического старта/рестарта.