runit это минималистичная система инициализации с автоматическим надзором за процессами. Сервис упал, runit его перезапустит без лишних настроек.runit работает в три этапа: инициализация системы, надзор за сервисами и корректное завершение работы. Основа это runsvdir, который следит за директориями сервисов и запускает runsv для каждого из них.Конфигурация сервиса это shell-скрипт. Без YAML, без XML, без многостраничной документации.
Установка:
# Debian/Ubuntu
sudo apt-get install runit
# Arch Linux
sudo pacman -S runit
# CentOS/RHEL
sudo dnf install runit
Создать сервис
Структура минимальная: директория с исполняемым файлом
run.sudo mkdir -p /etc/sv/webserver
sudo tee /etc/sv/webserver/run << 'EOF'
#!/bin/sh
exec 2>&1
cd /var/www/html
exec python3 -m http.server 8080
EOF
sudo chmod +x /etc/sv/webserver/run
# Включить сервис
sudo ln -s /etc/sv/webserver /etc/service/
Два ключевых правила в
run-скрипте: использовать exec вместо запуска в фоне и перенаправлять stderr через exec 2>&1. Программа должна работать на переднем плане, runit сам управляет процессом.Основные команды через
sv:sv start webserver # запустить
sv stop webserver # остановить
sv restart webserver # перезапустить
sv status webserver # статус
Пример вывода статуса:
run: nginx: (pid 1234) 3600s
down: mysql: 120s, normally up
Логирование через `svlogd`
runit поставляется с собственным логгером. Он умеет в ротацию, фильтрацию и временны́е метки.sudo mkdir -p /etc/sv/webserver/log
sudo tee /etc/sv/webserver/log/run << 'EOF'
#!/bin/sh
exec svlogd -tt /var/log/webserver
EOF
sudo chmod +x /etc/sv/webserver/log/run
sudo mkdir -p /var/log/webserver
Как выглядит миграция с systemd
Типичный unit-файл
systemd:[Service]
Type=simple
User=webuser
WorkingDirectory=/opt/webapp
ExecStart=/opt/webapp/bin/server
Restart=always
Эквивалент в
runit:#!/bin/sh
exec 2>&1
cd /opt/webapp
exec chpst -u webuser /opt/webapp/bin/server
chpst — утилита из runit для запуска процессов от другого пользователя и с ограничениями по ресурсам.Это не замена
systemd в полноценном десктопном окружении, но для серверных задач вполне рабочий вариант.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера