runit — это схема управления инициализацией и службами для Unix-подобных операционных систем, которая инициализирует, контролирует и завершает процессы во всей операционной системе. Runit — это повторная реализация набора инструментов управления процессами daemontools [3] , который работает во многих операционных системах на базе Linux, а также в операционных системах BSD и Solaris. В Runit реализована возможность распараллеливания запуска системных служб, что позволяет ускорить загрузку операционной системы. [4]
При работе в качестве демона инициализации Runit является прямым или косвенным предком всех других процессов. Это первый процесс , запускаемый во время загрузки , и он продолжает работать до тех пор, пока система не выключится. Он часто используется с другими системами инициализации в качестве отдельного менеджера служб. В роли менеджера служб его могут использовать непривилегированные пользователи для управления персональными службами, а также root для управления службами, которые иначе не управляются используемой в данный момент системой инициализации.
Runit стремится стать небольшой, модульной и переносимой кодовой базой. Роль инициализации Runit разделена на три этапа: однократная инициализация, контроль процесса и остановка или перезагрузка. Хотя первый и третий этапы должны быть адаптированы к конкретной операционной системе, в которой они работают, второй этап можно переносить на все POSIX- совместимые операционные системы. [5] Эти 3 этапа можно настроить с помощью 3 исполняемых файлов (обычно это сценарии оболочки) с именами соответственно 1, 2 и 3.
Этап 2 обычно вызывает двоичный файл с именем runvdir, который является процессом, ответственным за глобальное управление демоном: для каждого демона, который он находит в папке, переданной ему в качестве аргумента, он затем порождает отдельный сторожевой таймер, каждый из которых запускает демон (и регистратор). служба, в конечном итоге связанная с ним) и перезапускает его, если он умирает. В случае добавления или удаления демона он убивает сторожевой таймер или запускает новый. Исполняемые файлы с определенными именами используются для описания различных этапов жизни демона (запуск, проверка, завершение и т. д.), он может перехватывать сигналы, отправляемые и запускаемые определенными сценариями, если они существуют, а именованные каналы создаются для предоставления интерфейсов. для управления демоном.
Runit можно использовать либо в качестве замены [6] для sysvinit , либо в качестве супервизора службы (с sysvinit в качестве родительского процесса PID 1, который запускает процессы, указанные в файле inittab, или в какой-либо другой системе инициализации). [7] Стек программного обеспечения RubyWorks, способный запускать Ruby on Rails , включал в свой пакет Runit. [8]
Runit — это система инициализации по умолчанию:
Runit — это «официально» доступная система инициализации для: