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

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:a85445a42a04ac661a5fe092228ac003' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Случается,&nbsp;что какой-то процесс время от времени вылетает,&nbsp;что не есть хорошо. И выяснить причину падений не всегда удается. Как вариант - установка мониторинговой системы (<a href=\"http://muff.kiev.ua/content/monit-nadezhnyi-monitoring-sistemy\">Monit</a>, Zabbix, <a href=\"http://muff.kiev.ua/content/nagios-3x-nconf-nastroika-sistemy-monitoringa-nagios-3x-i-utility-konfigurirovaniya-nconf\">Nagios</a>, etc). Однако не всегда в этом есть смысл,&nbsp;особенно когда это сервер небольшого офиса. В этом случае работу сервиса проще проверять простеньким скриптом,&nbsp;который проверяет,&nbsp;запущен ли процесс,&nbsp;а если нет - дает команду на запуск сервиса.</p>\n<p class=\"rtejustify\">Отработаем на реальной ситуации... Знакомый пожаловался,&nbsp;что время от времени перестает работать телефония,&nbsp;и он перезапускает <strong>asterisk</strong>, согласно инструкции данной админом. Как оказалось,&nbsp;<strong>asterisk</strong> рендомно по времени и молча &quot;падал&quot;. Разбираться с причинами падений не было ни времени, ни заинтересованости,&nbsp;поэтому и пригодился даный скрипт.</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td style=\"background-color: rgb(51, 51, 51);\">\n<pre>\n<span style=\"color:#00ff00\"><strong>#!/bin/sh\n</strong></span></pre><pre>\n<span style=\"color:#00ff00\"><strong># Название процесса\n</strong></span><span style=\"color:#00ffff\"><strong>DAEMON=&quot;</strong></span><strong><span style=\"color:#ff0000\">asterisk</span><span style=\"color:#00ffff\">&quot;</span>\n<span style=\"color:#00ff00\"># &quot;Убираем&quot; grep из вывода</span>\n<span style=\"color:#00ffff\">EXCLUDE=&quot;grep&quot;</span>\n<span style=\"color:#00ff00\"># Минимальное количество процессов</span>\n<span style=\"color:#00ffff\">PROC_NUM=&quot;</span><span style=\"color:#ff0000\">0</span><span style=\"color:#00ffff\">&quot;</span>\n<span style=\"color:#00ff00\"># Команда для перезапуска</span>\n<span style=\"color:#00ffff\">RESTART=&quot;</span><span style=\"color:#ff0000\">/bin/sh /usr/local/etc/rc.d/asterisk restart</span><span style=\"color:#00ffff\">&quot;</span>\n<span style=\"color:#00ff00\"># Утилита ps\n</span><span style=\"color:#00ffff\">PS=&quot;/bin/ps&quot;</span>\n<span style=\"color:#00ff00\"># Утилита grep\n</span></strong><span style=\"color:#00ffff\"><strong>GREP=&quot;/usr/bin/grep&quot; </strong></span></pre><pre>\n<span style=\"color:#00ffff\"><strong>if [ `$PS -ax | $GREP $DAEMON | $GREP -v $EXCLUDE | wc -l` -le &quot;$PROC_NUM&quot; ]\nthen\n $RESTART\nfi</strong></span></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Добавим запуск скрипта (в моем случае я его сохранил как /usr/local/etc/check.sh) в <strong>cron</strong> с интервалом проверки каждую минуту:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>echo &#39;# Daemon check&#39; &gt;&gt;&nbsp;/etc/crontab</strong><br />\n # <strong>echo &#39;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp; /bin/sh /usr/local/etc/check.sh&#39; &gt;&gt; /etc/crontab</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Выполним проверку работы скрипта. Остановим процесс <strong>asterisk</strong> и по прошествии минуты,&nbsp;проверим его наличие в процессах:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>18:00 # <strong>sh /usr/local/etc/rc.d/asterisk stop</strong><br />\n Stopping asterisk<br />\n 18:01 # <strong>ps -ax | grep asterisk | grep -v grep</strong><br />\n 28756&nbsp; ??&nbsp; Ss&nbsp;&nbsp;&nbsp;&nbsp; 0:03,54 /usr/local/sbin/asterisk -n -U asterisk</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:a85445a42a04ac661a5fe092228ac003' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:8b1b00790317a36bc316a5000c001d4d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Лучше использовать monit, который мониторит падение процессов и перезапускает их. Есть так же уведомление на почту и прочие настройки.</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:8b1b00790317a36bc316a5000c001d4d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:24f99ee074cfd6f4d05c99fae02aa712' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Да, конечно, monit - более функциональный (о нем я упоминал в статье). Однако есть случаи,&nbsp;когда нету необходимости палить из пушки по воробьям. Тогда и приходит на помощь такой вот скрипт.</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:24f99ee074cfd6f4d05c99fae02aa712' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ff1c8201b608df737edd511ef51551a3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>так намного проще. прописал в крон и забыл. без всяких скриптов на кучу переменных</p>\n<p>pgrep -l -x dropbox || ~/.dropbox-dist/dropboxd</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:ff1c8201b608df737edd511ef51551a3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:e222c2dce53e4e9bb2d59f6537a912c9' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Да, возможен и такий вариант.&nbsp;</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:e222c2dce53e4e9bb2d59f6537a912c9' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:6b264a2552833c92132165677e011824' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Доработал скрипт, под себя, спасибо автору</p>\n<p>#!/bin/sh<br />\n#Скрипт проверки процесса asterisk и его перезапск<br />\n#* * * * * [ -x /var/lib/asterisk/bin/aster_chek.sh ] &amp;&amp; /var/lib/asterisk/bin/aster_chek.sh &gt;&gt; /var/log/asterisk/aster_chek.log 2&gt;&amp;1<br />\n#Скрипт написал BAF mail: <span class=\"spamspan\"><span class=\"u\">baf</span> [at] <span class=\"d\">it-north [dot] net</span></span></p>\n<p>#Команда для проверки<br />\nPS=`ps -ax | grep -v grep | grep&nbsp; -c &quot;/usr/sbin/asterisk -U asterisk -G asterisk&quot;`</p>\n<p>#Погнали<br />\nif [ &quot;$PS&quot; = &quot;1&quot; ]<br />\nthen<br />\n&nbsp;&nbsp; &nbsp;echo &quot;`date &quot;+%F %T&quot;` - Asterisk runinng&quot;</p>\n<p>else<br />\n&nbsp;&nbsp; &nbsp;echo &quot;`date &quot;+%F %T&quot;` - Asterisk not runinng&quot;<br />\n&nbsp;&nbsp; &nbsp;/etc/init.d/asterisk start<br />\nfi</p>\n<p>exit 0</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:6b264a2552833c92132165677e011824' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d5e0d8f1035142296b1b0cc4dbfd0c19' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Схоже такий функціонал реалізовано в systemd, якщо ж маєте старший дистр - юзаєм supervisord.</p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:d5e0d8f1035142296b1b0cc4dbfd0c19' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767596340, expire = 1767682740, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другу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.

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

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

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

Литература

Если Админ затрудняется расписаться в получении зарплаты - предложите ему набрать свой пароль!