MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Как сделать WatchDog через Сron для перезапуска сервиса в случае падения
20.07.2015
13:20
Текстовые метки: linux, cron, crontab, watchdog, перезапуск, отслеживание
Раздел: Компьютер - Linux - Bash - Команды и скрипты

В мире нет ничего идеального, и в среде Linux тоже. Редко, но все же возникает ситуация, когда какой-нибудь активно разрабатываемый сервис падает по только ему известным причинам. И пока не вышла новая версия, пока не обновились библиотеки, ничего не остается делать, как настраивать сторожевого пса (watchdog).


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



Простейший пример


В простейшем случае код Watchdog-а через Cron может выглядеть так:


* * * * * [ `ps -ef|grep -v grep|grep <stringdInPs>` -eq 0 ] && <commandRun>


Этот код размещается в файле crontab.


где:


  • <stringdInPs> - это строка, которая должна присутсвовать в выводе команды ps -ef. Если таковой не окажется (вывод будет нуливой -eg 0), то выполнится команда:
  • <commandRun> - это команда, которая запускает процесс.


Зачастую <stringdInPs> и <commandRun> содержат одну и ту же команду.



Сравнение вывода команды с заранее известной строкой


Сравнение вывода команды с заданным строковым значением можно организовать так:


* * * * * [[ "`service zoneminder status`" == "ZoneMinder is stopped" ]] && service zoneminder start


Подводные камни: этот код будет работать только в случае, если внутри Cron у вас используется командная оболочка Bash. Узнать, какая оболочка используется в Cron, можно заглянув в файл /etc/crontab, и посмотрев на переменную SHELL:


SHELL=/bin/sh


Для оболочки sh эквивалентный код будет выглядеть так:


* * * * * test "`service zoneminder status`" = "ZoneMinder is stopped" && service zoneminder start



Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования