unit.примерыPythonNode.jsJavaType и RestartЗащита службы

Type= и Restart=: какой выбрать

Type= — как systemd понимает, что служба запустилась

ЗначениеКогда «запущена»Для чего
simpleСразу после fork, ещё до запуска программыПрограмма работает на переднем плане и не уходит в фон — большинство своих приложений
execПосле успешного запуска исполняемого файлаТо же, что simple, но опечатка в пути сразу даёт ошибку start, а не падение потом
forkingКогда родительский процесс завершился, оставив демонаСтарые демоны, которые сами уходят в фон; нужен PIDFile=
oneshotКогда команда завершиласьРазовые задачи, скрипты для таймеров; с RemainAfterExit=yes — «включённое состояние»
notifyКогда программа сама сообщила о готовности (sd_notify)nginx-подобные демоны, gunicorn, PostgreSQL — systemd ждёт реальной готовности
idleКак simple, но после завершения других задач запускаРедко: чтобы вывод не перемешивался с загрузкой

Restart= — когда перезапускать

ЗначениеПерезапуск, если…
noникогда (по умолчанию)
on-failureненулевой код, сигнал, таймаут, watchdog — разумный выбор для веб-приложений
on-abnormalсигнал, таймаут или watchdog, но не ненулевой код выхода
on-abortтолько неперехваченный сигнал
on-watchdogтолько истёк WatchdogSec=
on-successтолько при чистом выходе
alwaysвсегда, даже после нормального завершения — для ботов и воркеров, которые не должны стоять

Перезапуск не бесконечен: по умолчанию после 5 запусков за 10 секунд служба блокируется. Поэтому вместе с Restart= ставят RestartSec= в несколько секунд. Как эти параметры работают вместе и где ловушки — подробно про Restart=.

systemctl stop не вызывает перезапуск ни при каком значении: остановка руками — не падение.

Готовые unit-файлы для своих приложений. Синтаксис примеров проверен systemd-analyze verify на systemd 255. Обновлено 2026-11-04.