Скрипт мониторинга и перезапуска процесса

Версия для печатиОтправить другуPDF version

Случается, что какой-то процесс время от времени вылетает, что не есть хорошо. И выяснить причину падений не всегда удается. Как вариант - установка мониторинговой системы (Monit, Zabbix, Nagios, etc). Однако не всегда в этом есть смысл, особенно когда это сервер небольшого офиса. В этом случае работу сервиса проще проверять простеньким скриптом, который проверяет, запущен ли процесс, а если нет - дает команду на запуск сервиса.

Отработаем на реальной ситуации... Знакомый пожаловался, что время от времени перестает работать телефония, и он перезапускает asterisk, согласно инструкции данной админом. Как оказалось, asterisk рендомно по времени и молча "падал". Разбираться с причинами падений не было ни времени, ни заинтересованости, поэтому и пригодился даный скрипт.

#!/bin/sh
# Название процесса
DAEMON="asterisk"
# "Убираем" grep из вывода
EXCLUDE="grep"
# Минимальное количество процессов
PROC_NUM="0"
# Команда для перезапуска
RESTART="/bin/sh /usr/local/etc/rc.d/asterisk restart"
# Утилита ps
PS="/bin/ps"
# Утилита grep
GREP="/usr/bin/grep" 
if [ `$PS -ax | $GREP $DAEMON | $GREP -v $EXCLUDE | wc -l` -le "$PROC_NUM" ]
then
   $RESTART
fi

Добавим запуск скрипта (в моем случае я его сохранил как /usr/local/etc/check.sh) в cron с интервалом проверки каждую минуту:

# echo '# Daemon check' >> /etc/crontab
# echo '*       *       *       *       *       root    /bin/sh /usr/local/etc/check.sh' >> /etc/crontab

Выполним проверку работы скрипта. Остановим процесс asterisk и по прошествии минуты, проверим его наличие в процессах:

18:00 # sh /usr/local/etc/rc.d/asterisk stop
Stopping asterisk
18:01 # ps -ax | grep asterisk | grep -v grep
28756  ??  Ss     0:03,54 /usr/local/sbin/asterisk -n -U asterisk

 

Ваша оценка: Нет Средняя: 5 (2 голоса)

Re: Скрипт мониторинга и перезапуска процесса

Лучше использовать monit, который мониторит падение процессов и перезапускает их. Есть так же уведомление на почту и прочие настройки.

Re: Скрипт мониторинга и перезапуска процесса

Да, конечно, monit - более функциональный (о нем я упоминал в статье). Однако есть случаи, когда нету необходимости палить из пушки по воробьям. Тогда и приходит на помощь такой вот скрипт.

Re: Скрипт мониторинга и перезапуска процесса

так намного проще. прописал в крон и забыл. без всяких скриптов на кучу переменных

pgrep -l -x dropbox || ~/.dropbox-dist/dropboxd

Re: Скрипт мониторинга и перезапуска процесса

Да, возможен и такий вариант. 

Re: Скрипт мониторинга и перезапуска процесса

Доработал скрипт, под себя, спасибо автору

#!/bin/sh
#Скрипт проверки процесса asterisk и его перезапск
#* * * * * [ -x /var/lib/asterisk/bin/aster_chek.sh ] && /var/lib/asterisk/bin/aster_chek.sh >> /var/log/asterisk/aster_chek.log 2>&1
#Скрипт написал BAF mail: baf [at] it-north [dot] net

#Команда для проверки
PS=`ps -ax | grep -v grep | grep  -c "/usr/sbin/asterisk -U asterisk -G asterisk"`

#Погнали
if [ "$PS" = "1" ]
then
    echo "`date "+%F %T"` - Asterisk runinng"

else
    echo "`date "+%F %T"` - Asterisk not runinng"
    /etc/init.d/asterisk start
fi

exit 0

Re: Скрипт мониторинга и перезапуска процесса

Схоже такий функціонал реалізовано в systemd, якщо ж маєте старший дистр - юзаєм supervisord.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература