Hacker News Digest

22 августа 2025 г. в 19:06 • git.vuxu.org • ⭐ 222 • 💬 82

OriginalHN

#linux#init#process-supervision#containers#docker#podman#lxc#kubernetes

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.

Жизненный цикл

  1. Подъём: SYS/setup, затем все непомеченные down.
  2. Работа: перезапуск при падении (пауза 2 с при частых падениях).
  3. Останов: nitroctl Shutdown/RebootSYS/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.