Скрипт автоматического перезапуска службы

На одном из серверов столкнулся с такой проблемой, что периодически в совершенно случайное время останавливается DNS сервер BIND, и соответственно перестаёт работать домен, о чём я узнаю по SMS-сообщению от сервиса Яндекс Метрика, приходилось по SSH подключаться к серверу и перезапускать сервер, благо сейчас есть телефоны с Android и различные SSH терминалы, попробовав разные я остановил свой выбор на Juice SSH, просто больше всего нравится.
Чтобы избежать таких неприятностей, было принято решение написать bash скрипт который раз в минуту будет проверять запущена ли служба или нет, если нет, то запускать её и отправлять уведомление о событии по почте.
Так как есть вероятность, что сервер не стартанёт, то скрипт после запуска повторно проверяет запущенность службы и если видит что служба не работает, отправляет сообщение с просьбой человека вмешаться. Эта часть скрипта, как мне кажется совсем коряво, сделана, но работает, если кто-то предложит более красивое решение, буду благодарен.
Итак начнём, все просто давольно таки ниже код скрипта с комментариями

#### Не забываем указать к какому интерпретатору скрипту необходимо обращаться
#! /bin/bash 

if [ -e /var/run/named/named.pid ] #так как при запуске службы создаётся файл процесса, 
# то мы просто проверяем есть ли он на месте или нет, ключ -e говорит скрипту проверить 
# существует ли файл /var/run/named/named.pid
then  
exit # файл есть, выходим из скрипта 
else 
/etc/init.d/bind9 start > /dev/null && /root/./send_notice > /dev/null # если файла нет, то стартуем
# его заново и отправляем уведомление по почте (см. содержание ниже)
fi # Указываем обязательно!!! Иначе скрипт не выполнится 
if [ -e /var/run/named/named.pid ] # проверяем повторно, если всё Ок, то выходим 
then
exit 
else
/root/./send_alarm >> /dev/null # если нет, то отправляем сообщение с просьбой вмешаться. 
fi 
exit 0 # прекращаем выполнение скрипта

Делаем скрипт исполняемым

~#: chmod +x script_name

Уведомление:

#! /bin/bash

FROM="From: "
TO="To:"
SUBJECT="Subject: Bind crash"
BODY="Обнаружено падение BIND9, но всё хорошо, служба перзапущена"
BODY1="Время события: $(date -R)"
echo $FROM >> message.tmp
echo $TO >> message.tmp
echo $SUBJECT >> message.tmp
echo $BODY >> message.tmp
echo $BODY1 >> message.tmp

/usr/sbin/sendmail -t < message.tmp
rm message.tmp

Тревога:

#! /bin/bash

FROM="From: "
TO="To: "
SUBJECT="Subject: !!! Bind troubles"
BODY="ВНИМАНИЕ скрипт не смог перезапустить BIND требуется вмешательство"
BODY1="Время события: $(date -R)"
echo $FROM >> message.tmp
echo $TO >> message.tmp
echo $SUBJECT >> message.tmp
echo $BODY >> message.tmp
echo $BODY1 >> message.tmp

/usr/sbin/sendmail -t < message.tmp
rm message.tmp

Это скрипт с комментариями я описывал ранее
Не забываем сделать эти оба скрипта исполняемыми.
Теперь добавим скрипт в cron

~#: crontab -e 

И вносим запись

0-59 * * * * /путь_к_скрипту 

Здесь мы указываем, что выполнять скрипт нужно каждую минуту.
Вот и всё, теперь BIND будет перезапускаться при каждом "чихе"

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.