RemainAfterExit=: служба остаётся активной после завершения
Заставляет systemd считать службу активной даже после того, как её процессы завершились. Используется для разовых задач и для описания состояний, а не работающих программ.
Что делает
Смысл в том, чтобы отличать «задача выполнена» от «задача не выполнялась». Без параметра одноразовая служба после отработки уходит в состояние inactive (dead), и по нему нельзя понять, была ли она вообще запущена. С параметром состояние становится active (exited) — то есть выполнено и действует.
Обратная сторона: активную службу нельзя запустить повторно, пока она не остановлена. Поэтому для задач, вызываемых таймером или наблюдателем за путём, этот параметр вреден: второе срабатывание ничего не сделает.
Где ставится. В секции [Service], обычно вместе с Type=oneshot.
Значения
| Значение | Что происходит |
|---|---|
yes | служба остаётся в состоянии active (exited) после завершения процессов. |
no | по умолчанию: после завершения служба неактивна. |
По умолчанию: no
Пример
Разовая настройка системы, которая должна считаться применённой.
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/sysctl --system
ExecStop=/usr/local/bin/revert-sysctl.sh
Пара «применить и откатить» — типичный случай для этого параметра: запуск включает состояние, остановка его снимает.
Типичные ошибки
Для задач по таймеру параметр мешает: активную службу таймер повторно не запустит.
Мониторинг, который проверяет «служба active», при этом параметре всегда получает успех — даже если задача внутри падала. Проверять надо результат, а не состояние.
Вместе с Restart=always параметр приводит к странному поведению: перезапускать нечего, а состояние остаётся активным.
Связанные ошибки
- status=0/SUCCESS, но служба считается упавшейПрограмма завершилась успешно, а systemctl показывает inactive или failed. Разбор: Type=simple против forking, RemainAfterExit, демонизация.
- Таймер активен, но не срабатываетТаймер systemd в состоянии active, но служба не запускается. Разбор: нет условия срабатывания, таймер не включён, ошибка в OnCalendar.
- Path-unit не реагирует на измененияUnit .path не запускает службу при появлении или изменении файла. Разбор: не включён, следит не за тем, служба уже активна.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.service(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)