Как автоматически перезапустить неудавшуюся службу в Linux

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

Для предотвращения простоев и обеспечения бесперебойной работы системные администраторы могут настроить автоматическую перезагрузку служб при их сбое, что особенно полезно для веб-серверов (Apache, Nginx), баз данных (MySQL, PostgreSQL) или других критически важных приложений, которые должны быть доступны в любое время.

В этом руководстве мы объясним, как использовать systemd для настройки автоматической перезагрузки службы в Linux в случае ее остановки.

Почему автоматически перезапускать службу?

Существует несколько причин, по которым вы можете хотеть автоматически перезапустить службу в Linux:

  • Минимизировать простои: Если служба неожиданно останавливается, автоматический перезапуск гарантирует минимальные нарушения для пользователей.
  • Повысить надежность: Службы, такие как веб-серверы, базы данных и фоновые процессы, должны всегда работать.
  • Снизить ручную работу: Без автоматизации вам пришлось бы часто проверять службы и вручную перезапускать их в случае сбоя.
  • Обработка неожиданных сбоев: Если служба аварийно завершает работу из-за программных ошибок, ограничений ресурсов или системных ошибок, systemd может перезапустить ее без вмешательства администратора.

Теперь давайте рассмотрим шаги по настройке автоматических перезапусков с использованием systemd.

Шаг 1: Определите службу, которую хотите перезапустить

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

systemctl list-units --type=service --state=running
List Running Linux Services

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

systemctl status apache2
Check Running Service Status

Замените apache2 на фактическое имя службы, которую вы хотите управлять.

Шаг 2: Отредактируйте конфигурацию службы

Systemd позволяет вам изменять поведение службы с помощью пользовательских файлов конфигурации. Вместо изменения системных настроек (которые могут быть перезаписаны во время обновлений), мы воспользуемся systemctl edit, чтобы создать файл переопределения.

Выполните следующую команду:

systemctl edit apache2

Это откроет пустой файл в вашем редакторе текста по умолчанию.

Если файл не пустой, вы увидите существующие настройки, которые можете изменить. В противном случае вам нужно будет добавить необходимую конфигурацию перезапуска.

Open Systemd Service Configuration File

Шаг 3: Добавьте конфигурацию перезапуска systemd

В редакторе добавьте следующие строки.

[Service]
Restart=always
RestartSec=5s

Объяснение этих настроек:

  • Restart=always – Гарантирует, что служба будет перезапущена при любом её останове.
  • RestartSec=5s – Указывает systemd подождать 5 секунд перед перезапуском службы, что может предотвратить быстрые циклы перезапуска в случае повторных сбоев.

После добавления сохраните и закройте файл.

Add Service Restart Configuration

После внесения изменений в службу systemd, необходимо перезагрузить systemd и перезапустить службу, чтобы убедиться, что новая конфигурация применена:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Чтобы подтвердить, что служба теперь настроена на автоматический перезапуск, выполните:

sudo systemctl show apache2 | grep Restart

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

Restart=always

Шаг 4: Проверка автоматического перезапуска в Linux

Чтобы убедиться, что конфигурация работает, вы можете вручную остановить службу и проверить, перезапускается ли она.

sudo systemctl stop apache2

Подождите 5 секунд, затем проверьте её статус.

sudo systemctl status apache2

Если служба снова работает, автоматический перезапуск работает!

Дополнительные параметры перезапуска

В зависимости от ваших потребностей, systemd предоставляет различные политики перезапуска:

  • Restart=always – Служба всегда перезапускается, даже если она была остановлена вручную.
  • Restart=on-failure – Перезапускается только в случае ошибки завершения работы службы (но не при ручной остановке).
  • Restart=on-abnormal – Перезапуск службы при сбое из-за сигнала (например, при нарушении сегментации).
  • Restart=on-watchdog – Перезапустить службу, если она зависает во время работы.

Вы можете заменить Restart=always на любой из этих вариантов в зависимости от ваших требований.

Как проверить журналы служб на наличие проблем

Если служба продолжает сбоить, хорошей идеей будет проверить журналы с помощью команды journalctl, которая покажет журналы службы за последние 10 минут.

journalctl -u apache2 --since "10 minutes ago"

Для получения потока журнала в реальном времени используйте:

journalctl -u apache2 -f
Вывод

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

Source:
https://www.tecmint.com/automatically-restart-service-linux/