Nitro: A tiny but flexible init system and process supervisor
nitro — миниатюрный, но гибкий init и супервизор процессов.
Назначение
- init для встраиваемых, десктопных и серверных Linux-систем
- initramfs, контейнеров (Docker, Podman, LXC, K8s)
- непривилегированный демон на POSIX
Конфигурация — каталог скриптов (по умолчанию /etc/nitro
).
Требования
- Unix-сокеты
tmpfs
или записываемый/run
Плюсы
- Всё состояние в RAM, работает на read-only root.
- Событийная модель без polling.
- Ноль аллокаций и ограниченных fd во время работы.
- Один статический бинарник + опциональный
nitroctl
. - Сервисы — просто каталоги со скриптами, компиляция не нужна.
- Перезапуск, логирование, цепочки логов, независимость от времени.
- Запускается на FreeBSD через
/etc/ttys
.
Сервис
Каждый подкаталог /etc/nitro
может содержать:
setup
— предзапуск, должен завершиться с 0.run
— основной процесс (не должен завершаться).finish
— пост-обработка, получает код выхода и сигнал.log
→ symlink на другой сервис для логов.down
— не поднимать автоматически.- Имена ≤ 64 символов, без
/
,,
, переводов строк. - Каталоги с
@
в конце игнорируются (параметризованные сервисы).
Специальные сервисы
LOG
— лог по умолчанию.SYS/setup
— перед стартом остальных.SYS/finish
— перед остановкой всех.SYS/final
— после завершения всех процессов.SYS/fatal
— при критической ошибке.SYS/reincarnate
— вместо выключения (полезно для initramfs).
Параметризованные сервисы
Каталог foo@
+ symlink foo@bar
→ запуск foo@/run bar
.
nitroctl up foo@baz
запустит foo@/run baz
даже без symlink.
Жизненный цикл
- Подъём:
SYS/setup
, затем все непомеченныеdown
. - Работа: перезапуск при падении (пауза 2 с при частых падениях).
- Останов:
nitroctl Shutdown/Reboot
→SYS/finish
→ SIGTERM (7 с) → SIGKILL →SYS/final
→ reboot/off/exit.
Управление nitroctl
nitroctl [команда] [сервис]
list
— состояния, pid, uptime, код выхода.up
/down
— запустить/остановить (SIGTERM илиdown-signal
).start
/stop
/restart
— с ожиданием успеха.p
/c
/h
— SIGSTOP/SIGCONT/SIGHUP.