В дистрибутивах 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 для более простого управления службами.




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