В системе Linux службы (демоны), также называемые сервисами, играют важную роль в обработке различных задач, таких как веб-хостинг, управление базами данных и сетевое взаимодействие. Однако службы могут иногда выходить из строя или останавливаться из-за ошибок, высокого использования ресурсов или неожиданных сбоев системы.
Для предотвращения простоев и обеспечения бесперебойной работы системные администраторы могут настроить автоматическую перезагрузку служб при их сбое, что особенно полезно для веб-серверов (Apache, Nginx), баз данных (MySQL, PostgreSQL) или других критически важных приложений, которые должны быть доступны в любое время.
В этом руководстве мы объясним, как использовать systemd для настройки автоматической перезагрузки службы в Linux в случае ее остановки.
Почему автоматически перезапускать службу?
Существует несколько причин, по которым вы можете хотеть автоматически перезапустить службу в Linux:
- Минимизировать простои: Если служба неожиданно останавливается, автоматический перезапуск гарантирует минимальные нарушения для пользователей.
- Повысить надежность: Службы, такие как веб-серверы, базы данных и фоновые процессы, должны всегда работать.
- Снизить ручную работу: Без автоматизации вам пришлось бы часто проверять службы и вручную перезапускать их в случае сбоя.
- Обработка неожиданных сбоев: Если служба аварийно завершает работу из-за программных ошибок, ограничений ресурсов или системных ошибок, systemd может перезапустить ее без вмешательства администратора.
Теперь давайте рассмотрим шаги по настройке автоматических перезапусков с использованием systemd.
Шаг 1: Определите службу, которую хотите перезапустить
Перед внесением изменений вам нужно знать точное имя службы, которую вы хотите настроить, с помощью вывода всех работающих служб.
systemctl list-units --type=service --state=running

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

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

Шаг 3: Добавьте конфигурацию перезапуска systemd
В редакторе добавьте следующие строки.
[Service] Restart=always RestartSec=5s
Объяснение этих настроек:
Restart=always
– Гарантирует, что служба будет перезапущена при любом её останове.RestartSec=5s
– Указывает systemd подождать 5 секунд перед перезапуском службы, что может предотвратить быстрые циклы перезапуска в случае повторных сбоев.
После добавления сохраните и закройте файл.

После внесения изменений в службу 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/