Runit - система инициализации во многих дистрибутивах Linux (например, [[software:administration:linux:distributives:voidlinux|VoidLinux]]).
====== Управление сервисами в Runit ======
За управление сервисами в системе инициализации runit отвечает утилита ''sv''.
sv
^ Подкоманда ^ Описание действия ^
| 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''.
|\_ check*
|\_ run*
|\_ down
|\_ finish*
\__ log/
\_ run*
Для автостарта сервиса следует создать символическую ссылку в каталоге ''/run/runit/runsvdir/current''((в [[..:distributives:voidlinux:|VoidLinux]] для упрощения создана ссылка ''/var/service'' на данный каталог)). В случае, если присутствует файл ''down'' в каталоге сервиса, автостарт не будет производится((содержимое файла down игнорируется)).
===== Назначение файлов и подкаталогов =====
Основополагающим является файл запуска сервиса --- ''run''. Он определяет, как процесс сервиса будет запущен. Должен иметь флаг исполняемого((например, ''chmod +x run'')). FIXME
В случае, если запускаемый процесс --- форкающийся, то для отслеживания его состояния следует использовать файл ''check'', описывающий, как отслеживать процесс.
==== Логгирование ====
Для включения логгирования каталог сервиса должен содержать подкаталог ''log'' и в нем файл исполняемый ''run'', который будет принимать stdout((для получения данных из stderr следует сделать перенаправление в stdout)) от основного скрипта ''run'' сервиса. Как пример, со следующим содержимым:
#!/bin/sh
exec vlogger -t service -p daemon