Runit: Возможности каталога сервиса
• Для создания простейшего сервиса runit достаточно одного исполняемого файла
run, но каталог службы может содержать и другие файлы, с помощью которых настраивается её поведение.• Файл
down запрещает автоматический запуск сервиса. runsv продолжит следить за каталогом, но будет ждать команды от пользователя.Создать его можно командой:
touch /etc/sv/example/down
• После этого сервис можно однократно запустить вручную:
sv once example
• В отличие от
sv up, команда sv once не станет перезапускать программу после её завершения, что удобно для проверки нового сервиса.• Исполняемый файл
finish запускается после завершения run. Он получает код завершения процесса и информацию о сигнале, которым тот был остановлен, поэтому через finish можно выполнить очистку временных файлов или подготовить окружение перед перезапуском.• Файл
check позволяет проверить не только наличие процесса, но и реальную готовность сервиса. Например, для веб-приложения можно проверить, открылся ли нужный порт:#!/bin/sh
exec nc -z 127.0.0.1 8080
• Если
check завершается с кодом 0, сервис считается готовым. Такая проверка используется командами sv start, sv restart и sv check.• Для запуска программы от имени отдельного пользователя применяется
chpst:#!/bin/sh
exec chpst -u serviceuser:servicegroup \
/usr/bin/example --foreground
• Кроме смены пользователя,
chpst умеет изменять переменные окружения, лимиты ресурсов, корневой каталог процесса и некоторые другие параметры.• Через
sv также можно отправлять процессу сигналы:sv hup example
sv term example
sv kill example
• Полноценного декларативного графа зависимостей, как в systemd, у runit нет. При необходимости один сервис можно дождаться из
run скрипта:sv start database || exit 1
exec /usr/bin/example --foreground
• Однако многие службы просто завершаются при отсутствии зависимости, после чего
runsv продолжает пытаться их запустить, пока необходимый компонент не появится.• Каталог сервиса в runit это не просто место для одного скрипта, а небольшой интерфейс управления его запуском, остановкой, проверкой и восстановлением. Работа
down, finish и управляющих сигналов описана в документации runsv и sv. Удачи!• Поддержать автора монеткой: @v_meshke
