Как автоматически перезапустить службу после сбоя в SysVinit и Upstart

В дистрибутивах Linux на базе systemd управление и автоматический перезапуск сервисов после сбоя относительно просты. Однако многие старые или минимальные системы Linux используют альтернативные init системы, такие как SysVinit и Upstart, которые требуют различных подходов для управления и перезапуска сервисов.

В этом руководстве мы рассмотрим, как автоматически перезапустить сбойную службу в системах без Systemd с помощью SysVinit и Upstart.

1. Автоматический перезапуск служб с помощью SysVinit

SysVinit – одна из старейших init систем, широко использовавшаяся в таких дистрибутивах, как Debian и CentOS, до перехода на systemd.

Шаг 1: Установка и настройка monit

monit – это легкая утилита с открытым исходным кодом, которая отслеживает работу служб и автоматически перезапускает их при сбоях.

Debian/Ubuntu:

sudo apt update
sudo apt install monit

CentOS/RHEL:

sudo yum install monit

Шаг 2: Настройте Monit для мониторинга службы

Отредактируйте файл конфигурации Monit:

sudo nano /etc/monit/monitrc

Добавьте определение службы:

Пример: Monitor Apache service
check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/etc/init.d/apache2 start"
    stop program = "/etc/init.d/apache2 stop"
    if failed port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

Пояснение к вышеуказанному определению услуги:

  • check process apache2 – Определяет службу для мониторинга.
  • start/stop program – Команды для запуска и остановки службы.
  • if failed port 80 – Перезапускается, если HTTP-порт становится недоступным.

Далее включите, запустите и проверьте состояние monit.

sudo systemctl enable monit
sudo systemctl start monit
sudo monit status

2. Автоматический перезапуск служб с помощью Upstart

Upstart был системой по умолчанию init в Ubuntu до systemd, и он использует конфигурационные файлы, расположенные в /etc/init/, для определения управления службами.

Шаг 1: Создание файла конфигурации Upstart

Создайте пользовательскую конфигурацию Upstart для службы.

sudo nano /etc/init/apache2.conf

Добавьте следующее содержимое.

Apache service monitoring
description "Apache2 Service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
exec /usr/sbin/apache2ctl -D FOREGROUND

Пояснение к приведенной выше конфигурации:

  • respawn – автоматический перезапуск службы в случае сбоя.
  • respawn limit 10 5 – Ограничение перезапуска 10 попытками в течение 5 секунд для предотвращения чрезмерных перезапусков.

Далее включите, запустите и управляйте службой.

sudo start apache2
sudo stop apache2
sudo status apache2

Чтобы автоматически включить службу при запуске.

sudo update-rc.d apache2 defaults

3. Использование Cron для ручного перезапуска служб

Если monit или Upstart недоступны, в качестве запасного варианта можно использовать задание cron для периодической проверки и перезапуска службы.

Создайте сценарий оболочки.

sudo nano /usr/local/bin/check_apache.sh

Добавьте следующее содержимое.

#!/bin/bash
if ! pgrep -x "apache2" > /dev/null
then
    /etc/init.d/apache2 start
fi

Сделайте скрипт исполняемым.

sudo chmod +x /usr/local/bin/check_apache.sh

Добавьте задание cron для запуска скрипта.

sudo crontab -e

Добавьте следующую строку, чтобы проверять службу каждые 5 минут.

*/5 * * * * /usr/local/bin/check_apache.sh

Заключение

Автоматический перезапуск сбойных служб на системах без systemd требует немного больше ручной настройки, но такие инструменты, как скрипты monit, Upstart или cron, могут эффективно справляться с отказами служб и поддерживать бесперебойную работу ваших приложений.

Если вы все еще используете систему без systemd, возможно, стоит рассмотреть возможность обновления до дистрибутива на базе systemd для более простого управления службами.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Похожие статьи

Комментарии (0)