Добрый день дорогой читатель, данное повествование не является
истиной в последней инстанции, это некая инструкция по управлению процессами в Void Linux через средства самой системы инициализации runit. (в основном для собственного пользования) Void Linux с пояснениями и все возможными мыслями. Действия будут происходить на KVM/QEMU для наглядности.
runit это минималистичная система инициализации, кроссплатформенная и эффективная замена традиционным схемам инициализации Unix (таким как SysVinit) и современным альтернативам (таким как systemd). Она разработана с акцентом на надежность, простоту и высокую скорость загрузки системы.
Основные характеристики и принципы работы:
- Минимализм и простота: Runit следует философии Unix: каждая программа делает одну вещь хорошо. Ядро runit, работающее как процесс с PID 1, выполняет минимум задач, перекладывая основную работу на другие утилиты.
- Трехэтапный процесс: Работа runit как системы инициализации состоит из трех основных этапов:
Этап 1: Выполнение одноразовых задач инициализации системы (скрипт /etc/runit/1).
Этап 2: Запуск и управление всеми системными службами (через программу runsvdir). Этот этап активен на протяжении всего времени работы системы. Если он завершается с ошибкой, runit перезапускает его.
Этап 3: Корректное завершение работы, выключение или перезагрузка системы (скрипт /etc/runit/3). - Супервизия служб (Process Supervision): Runit отлично справляется с задачей управления долгоживущими процессами (демонами). Программа runsv постоянно следит за службой и автоматически перезапускает ее в случае сбоя.
- Структура сервисных директорий:
Вместо сложных скриптов инициализации (как в SysV init), runit использует простую структуру директорий. Каждая служба определяется своей директорией (например, в /etc/sv/<имя_службы>/), которая должна содержать исполняемый файл run. - Параллельный запуск: Runit способен запускать службы параллельно, что значительно сокращает общее время загрузки операционной системы.
- Надежное логирование: Включает в себя простую, но мощную утилиту логирования svlogd, которая поддерживает ротацию логов, сжатие и удаленное логирование.
- Кроссплатформенность: Runit может работать в различных Unix-подобных операционных системах, включая Linux, *BSD, macOS и Solaris.
Преимущества:
- Скорость: Быстрая загрузка благодаря параллелизму и минималистичному дизайну.
- Надежность: Автоматический перезапуск упавших служб и гарантированное чистое состояние процессов.
- Простота настройки: Управление службами через простые файлы и симлинки, что упрощает администрирование.
Runit популярен в таких дистрибутивах, как Void Linux и Artix Linux, где он
используется как основная система инициализации вместо более сложного
systemd. Команда sv это основной инструмент для взаимодействия с сервисами runit.
Синтаксис: sudo sv [действие] [имя сервиса]
основные действия:
- status - статус сервиса
- up - запуск сервиса
- down - остановка сервиса
Чтобы увидеть список всех сервисов, которые в данный момент активны (находятся в каталоге /var/service/) и их текущий статус (up или down) следует выполнить следующую команду:
sudo sv status /var/service/*
Использование ls -l для проверки активации
runit активирует сервисы с помощью символических ссылок из /etc/sv/ в /var/service/. Вы можете проверить наличие ссылки, чтобы убедиться, что сервис "включен" вымолнив команду:
ls -l /var/service/*
в зависимости от состояния может показать следующие статусы
- down: Сервис не запущен (возможно, он отключен или остановлен вручную).
- down: sshd: 0s, normally up, wanted
- normally down: Сервис не должен работать при нормальных условиях.
- not found: Сервис не существует в /etc/sv/ или не активирован в /var/service/.
Что бы проверить статус конкретного сервиса например, sshd следует выполнить команду:
sudo sv status sshd
как видим выдал ошибку причин несколько либо пакет не установлен, либо не назначен симлинк на автозапуск давайте разбираться
sudo xpbs-query -s openssh
выхлоп данной команды говорит о том что пакет установлен, даже не было смысла выполнять следующую команду
sudo xpbs-query -Rs openssh
которая прошлась поиском по репозиторию, выполнив следюущую команду
ls -l /etc/sv/
выхлоп которой показал что сервис sshd нам доступен
давайте создадим симлинк для sshd для того чтобы иметь возможность управлять сервисом
sudo ln -s /etc/sv/sshd /var/service/
убедимся что все прошло гладно выполнив команду
sudo ls -l /var/service/*
как видим симлинк на сервис есть
а теперь проверим статус сервиса, команду уже знаем
sudo sv status sshd
сервис запущен, что бы остановить сервис сделует выполнить команду
sudo sv down sshd
ипосмотрим статус
sudo sv status sshd
как видим сервис остановлен, пробуем запустит
sudo sv up sshd
уже знаем как проверить статус
sudo sv status sshd
Резюмируя данное повествование подведем итоги по командам
sudo ls -l /etc/sv/ - просмотр всех сервисов какие доступны в системе
sudo sv status /var/service/* - просмотр всех сервисов и их статусов
sudo ls -l /var/service/* - просмотр всех симлинков автозапуске
sudo ln -s /etc/sv/[имя сервиса] /var/service/ - добавление сервиса в автозапуск а так же управлять им с помощью команд ниже
sudo rm /var/service/[имя сервиса] - удаление симлинка сервиса из автозапуска
sudo sv status [имя сервиса] - статус сервиса
sudo sv up [имя сервиса] - запуск сервиса
sudo sv down [имя сервиса] - остановка сервиса
Данная система достаточно легка в понимании и в использовании.
За основу взято Void Linux Handbook, документация по runit, а так же собственная практика.
За сим откланиваюсь...