Содержание

Runit - система инициализации во многих дистрибутивах Linux (например, VoidLinux).

Управление сервисами в Runit

За управление сервисами в системе инициализации runit отвечает утилита sv.

sv <start|stop|status|...> <service_name>
Подкоманда Описание действия
start Аналогично up, но в течение 7 секунд пытается перезапустить в случае ошибки сервиса до получение эффекта, потом выводит состояние
stop Аналогично down, но в течение 7 секунд ожидает эффекта, потом выводит состояние сервиса
status Выводит состояние сервиса
up Запускает сервис, в случае ошибки запуска — пытается перезапустить
down Останавливает сервис отправкой сигнала SIGTERM, если через какое-то время процесс остается запущенным — посылает SIGKILL
once Запускает сервис, если произошла ошибка запуска — не пытается перезапустить
pause FIXME
exit Посылает процессу сервиса SIGTERM и SIGCONT, ждет завершения процесса логгирования (если есть) и завершает процесс runsv для процесса сервиса
reload Отпраляет процессу SIGHUP и выводит состояние процесса сервиса
restart Пытается в течение 7 секунд остановить сервис (SIGTERM), потом выполняет его запуск и выводит отчет о состоянии
shutdown Аналогично exit, но ожидает 7 секунд и выводит отчет

Для stop, reload, restart и shutdown доступен префикс force-.

Скелет сервиса

В системе, использующей runit, под скрипты запуска и настройки сервисов выделен каталог /etc/sv.

/etc/sv/service-name
|\_ check*
|\_ run*
|\_ down
|\_ finish*
 \__ log/
    \_ run*

Для автостарта сервиса следует создать символическую ссылку в каталоге /run/runit/runsvdir/current1). В случае, если присутствует файл down в каталоге сервиса, автостарт не будет производится2).

Назначение файлов и подкаталогов

Основополагающим является файл запуска сервиса — run. Он определяет, как процесс сервиса будет запущен. Должен иметь флаг исполняемого3). FIXME

В случае, если запускаемый процесс — форкающийся, то для отслеживания его состояния следует использовать файл check, описывающий, как отслеживать процесс.

Логгирование

Для включения логгирования каталог сервиса должен содержать подкаталог log и в нем файл исполняемый run, который будет принимать stdout4) от основного скрипта run сервиса. Как пример, со следующим содержимым:

log/run
#!/bin/sh
 
exec vlogger -t service -p daemon
1)
в VoidLinux для упрощения создана ссылка /var/service на данный каталог
2)
содержимое файла down игнорируется
3)
например, chmod +x run
4)
для получения данных из stderr следует сделать перенаправление в stdout