GrabDuck

Автоматический перезапуск сервиса Linux

:

Иногда сервисы ни с того ни с сего падают и приходиться их вручную восстанавливать. Если для пользователя домашнего компьютера это не критично, потому что как упало так и поднимем, но вот на серверах это может вызвать серьезные затруднения, ведь не всегда есть возможность зайти на сервер удаленно и перезапустить сломленный сервис.

В этой инструкции я покажу как настроить автоматический перезапуск сервиса в Linux несколькими способами: с помощью скрипта мониторинга периодически запускаемого через cron и набора утилит для управления демонами daemontools.  Пожалуй начнем с последнего.

Автоматический перезапуск сервиса через deamontools

Daemontools - это набор утилит для управления и мониторинга состояния сервисов в Linux. Основной важной для нас особенностью Daemontools есть возможность автоматически перезапускать сервисы при их падении. Также Daemontools поддерживает ротацию логов, но об этом уже не в этой статье.

Для большинства популярных дистрибутивов есть готовые установочные пакеты в их официальных репозиториях.

Для установки в Ubuntu, Debian, Linux Mint выполните:

$ sudo apt-get install daemontools

Для Fedora и RHEL команда установки будет выглядеть следующим образом:

$ sudo yum install daemontools

А для Gentoo:

$ sudo emerge daemontools

Пользователи ArchLinux могут найти соответствующий пакет в AUR.

Теперь необходимо добавить daemontools в автозагрузку. Сделать это можно добавив следующую команду в конец rc.local:

$ sudo nano /etc/rc.local

 svscanboot &

Программа svscanboot запускает и контролирует другие утилиты для управления демонами, если хотите более подробную информацию смотрите на опеннете.

Для управления демонами в Linux Deamontools создает папку /service, все сервисы описанные в этой папке автоматически запускаются при запуске daemontools. Каждый демон должен иметь свой подкаталог и в нем скрипт запуска с названием run.

Теперь рассмотрим создание скриптов для daemontools. Они ничем не отличаются от обычных скриптов linux. Рассмотрим все на примере запуска и мониторинга сервиса apache.

Сначала создайте подкаталог в папке /service:

$ mkdir /service/apache

Теперь создайте сам скрипт запуска:

$ nano /etc/service/apache/run

#/bin/bash

/usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -d /usr/lib64/apache2 -f /etc/apache2/httpd.conf -k start

У меня Apache запускается такой командой, но у вас может быть по другому. После сохранения сделайте скрипт исполняемым:

$ sudo chmod ugo+x /service/apache/run

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

$ ps aux | grep apache

Уничтожим все утилитой kill:

$ sudo kill -9 <тут pid>

Опять смотрим список процессов и видим что все на месте:

$ ps aux | grep apache

Автоматический перезапуск сервиса с помощью скрипта

Это самый простой и самый надежный способ работающий абсолютно во всех дистрибутивах linux и не требующий установки дополнительных утилит. Для того же Apache скрипт выглядит следующим образом:

#!/bin/bash

ps -A | grep apache || /etc/init.d/apache start

Сохраните файл, сделайте его исполняемым:

$ chmod ugo+x ~/path/to/script

Теперь добавьте запись в cron для периодического запуска скрипта:

$ crontab -e

*/5 * * * * /path/to/script

Осталось перезапустить cron:

$ sudo /etc/init.d/cron restart

На этом все, желаю долгих аптаймов вашим Linux серверам и пусть ваши сервисы никогда не падают.