Случается, что какой-то процесс время от времени вылетает, что не есть хорошо. И выяснить причину падений не всегда удается. Как вариант - установка мониторинговой системы (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 |
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.