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.