Моментальное восстановление с systemd и RuntimeMaxSec

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

systemdruntimemaxsecrestart

ℹ️ Иногда сервис может зависнуть или внезапно завершиться, и вам нужно автоматически перезапустить его. Вместо крон-задач или костыльных скриптов используйте systemd с мощными возможностями автоматического восстановления.

🔥 Пример: автоматический рестарт процесса с ограничением по времени

Допустим, у вас есть скрипт /usr/local/bin/my_script.sh, который должен работать постоянно, но может зависнуть. Вместо ручного контроля создадим systemd-юнит.

🖥 1. Создаём сервис:

sudo nano /etc/systemd/system/my_script.service

📑 2. Добавляем конфигурацию:

[Unit]
Description=Мой скрипт с автоматическим рестартом
After=network.target

[Service]
ExecStart=/usr/local/bin/my_script.sh
Restart=always
RestartSec=5
RuntimeMaxSec=600
KillMode=process

[Install]
WantedBy=multi-user.target
  • Restart=always — перезапуск при любой ошибке
  • RestartSec=5 — подождать 5 секунд перед рестартом
  • RuntimeMaxSec=600 — убьёт процесс, если он работает больше 10 минут (предотвращает зависания)
  • KillMode=process — убивает только главный процесс, не трогая детей

✅ 3. Активируем сервис:

sudo systemctl daemon-reload
sudo systemctl enable my_script
sudo systemctl start my_script

✳️ Теперь ваш скрипт будет автоматически перезапускаться, даже если он зависнет!

tags: #полезно #linux

🧭 @recura_tech

Скриншот тёмного терминала с примером systemd-юнита: видна конфигурация, параметры Restart, RestartSec и RuntimeMaxSec.
Пример systemd-юнита с RuntimeMaxSec и Restart в терминале.

Читайте так же