В systemd есть встроенный механизм автоматического перезапуска сервисов при их падении. Управляется это параметром Restart в разделе [Service] unit-файла.
📌 Основные значения Restart
always - перезапуск всегда (даже при корректном завершении)
on-success – только если сервис завершился без ошибок
on-failure – при ошибках или принудительном завершении (SIGKILL, timeout)
on-abnormal – при завершении сигналом или зависании
on-abort – если сервис был принудительно завершён
on-watchdog – при срабатывании watchdog timeout
no – автозапуск отключен (значение по умолчанию)
⚙️ Настройка автозапуска сервиса
Редактировать основной unit-файл не нужно. Достаточно создать override.conf:
mkdir -p /etc/systemd/system/nginx.service.d
nano /etc/systemd/system/nginx.service.d/override.conf
Добавьте настройки:
[Service]
Restart=always
RestartSec=5s
Примените изменения:
systemctl daemon-reload
Теперь при падении Nginx перезапустится через 5 секунд. Проверка:
systemctl status nginx
kill -9 <PID>
systemctl status nginx
🌟 Когда не стоит включать автозапуск:
1. Базы данных (MySQL, PostgreSQL) – после аварии могут запустить ресурсоёмкое восстановление, которое OOM-killer прервёт, создавая бесконечный цикл.
2. Кластеры (Elasticsearch, Ceph) – возможна рассинхронизация или некорректная работа.
Для веб-серверов (Nginx, Apache), почтовых сервисов (Postfix, Dovecot) и агентов мониторинга (Zabbix Agent) – автозапуск обычно безопасен.
✉️ Оповещения о сбоях
Добавьте в override.conf, чтобы получать уведомления:
[Unit]
OnFailure=your-notify-script.service
Это может быть скрипт с отправкой алерта в Telegram или email.
#linux #systemd
🧑💻 NetworkAdmin