Иногда сервисы ни с того ни с сего падают и приходиться их вручную восстанавливать. Если для пользователя домашнего компьютера это не критично, потому что как упало так и поднимем, но вот на серверах это может вызвать серьезные затруднения, ведь не всегда есть возможность зайти на сервер удаленно и перезапустить сломленный сервис.
В этой инструкции я покажу как настроить автоматический перезапуск сервиса в 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 запускает и контролирует другие утилиты для управления демонами, если хотите более подробную информацию смотрите на опеннете.
Для управления демонами в 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
В скрине
screen
-A -m -d -S name_screen_id1
Осталось перезапустить cron:
sudo
/etc/init.d/cron restart