Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая шпаргалка по системе инициализации RunIt в контексте Artix Linux, со всевозможными мыслями и дополнениями.
RunIt это компактная и быстрая система инициализации и управления сервисами для Linux-подобных ОС. Она известна своей надежностью, простотой и способностью автоматически перезапускать упавшие процессы.
Artix Linux с системой инициализации runit это одна из самых популярных комбинаций для тех, кто хочет использовать базу Arch Linux, но полностью отказаться от systemd в пользу минимализма и скорости.
Основные особенности
- Трехэтапная загрузка: Весь процесс работы делится на три стадии: инициализация системы (этап 1), работа сервисов (этап 2) и корректное завершение/перезагрузка (этап 3). По подробнее о них чуть ниже.
- Контроль сервисов: Демон runsv непрерывно следит за запущенными службами. Если процесс завершается с ошибкой, runit мгновенно запускает его снова.
- Параллельный запуск: В отличие от последовательной классической SysVinit, runit может запускать несколько сервисов одновременно, что значительно ускоряет загрузку.
- Чистое состояние: Каждый сервис всегда стартует в идентичном окружении, независимо от того, был ли это первый запуск или автоматический рестарт.
Установка пакетов: В Artix пакеты для управления сервисами вынесены в отдельно и имеют суффикс -runit. То есть , например, если нужен ssh, вы устанавливаете не только openssh, но и openssh-runit. Некая пакетная специфика данного дистрибутива. Команда будет выглядеть так
sudo pacman -S openssh openssh-runit
Трехэтапная структура runit. В отличие от монолитного systemd, runit разделяет процесс загрузки на три четких этапа, скрипты которых находятся в /etc/runit/:
- Этап 1: Выполняется один раз при старте. Инициализирует оборудование, монтирует файловые системы и настраивает базовые параметры.
- Этап 2: Основной этап работы. Запускает супервизор runsvdir, который следит за состоянием всех сервисов в директории /var/service.
- Этап 3: Выполняется при выключении или перезагрузке. Корректно останавливает сервисы и размонтирует диски.
Структура работы. Runit использует простую файловую структуру для управления:
- Каталоги уровней: Основные скрипты хранятся в /etc/runit/1, /etc/runit/2 и /etc/runit/3.
- Директория доступных сервисов: /etc/runit/sv/ здесь лежат скрипты запуска.
- Директория активных сервисов: /run/runit/service/
- Скрипт run: Для добавления сервиса достаточно создать папку с исполняемым файлом run, который описывает запуск процесса.
- Команда sv: Используется пользователем для управления сервисами.
Управление сервисами. В Artix для управления автозагрузкой принята схема с использованием символических ссылок :
- sudo ln -s /etc/runit/sv/[название сервиса] /run/runit/service/ - Включение сервиса в автозагрузку
- sudo rm /run/runit/service/[название сервиса] - Исключение сервиса из автозагрузки
Управление сервисами утилитой sv. Для большинства команд требуются привилегии суперпользователя (sudo). Для оперативного управления запущенными службами используется конструкция из команды sv:
- sudo sv status [название сервиса] - проверить, запущен ли демон и сколько времени он работает.
- sudo sv up [название сервиса] / sudo sv start [название сервиса] - запуск сервиса
- sudo sv down [название сервиса] / sudo sv stop [название сервиса] - остановка сервиса
- sudo sv restart [название сервиса] - перезапуск сервиса.
Для наглядности по практикуемся все с тем же сервисом ssh. Посмотрим какие сервисы у нас в системе, выполнив команду ниже:
ls -l /etc/runit/sv
ssh доступен, для автозапуска создадим симлинк в директорию /run/runit/service/, выполним команду ниже:
sudo ln -s /etc/runit/sv/sshd /run/runit/service/
выполнив команду ниже мы в этом убедимся
ls -l /run/runit/service/
посмотрим статус сервиса выполнив команду ниже
sudo sv status sshd
из статуса ясно, сервис автоматически запустился при добавлении в директорию автозапуска. Команда ниже говорит сама за себя, перезапуск
sudo sv restart sshd
довольно таки понятно, остановка сервиса
sudo sv stop sshd
Запуск сервиса
sudo sv start sshd
далее обратите внимание на команду, она аналогична конструкции со stop, но уже без выхлопа выполненного действия, что бы посмотреть состояние следует выполнить конструкцию команды со status
sudo sv down sshd
sudo sv status sshd
аналогична конструкция команды запуска только без оповещения статуса
sudo sv up sshd
sudo sv status sshd
наигравшись с ssh давайте исключим из автозагрузки сервис, выполнив команду ниже
sudo rm /run/runit/service/sshd
команда ls -l /run/runit/service/ чисто для наглядности
Почему выбирают runit?
- Надежность: Система инициализации состоит из трех этапов (старт, работа, выключение), которые четко разделены.
- Легкость освоения: Файлы сервисов это обычно простые shell-скрипты run.
- Гибкость: Для активации сервиса достаточно создать символическую ссылку.
Где используется. Система популярна в дистрибутивах, ориентированных на минимализм и скорость, таких как Void Linux, где является основной, Antix и Devuan в качестве альтернативы. Также может применяется внутри Docker-контейнеров для управления несколькими процессами.
За основу взято статьи и темы форумов по данной тематике, а так же собственный опыт и наработки.
За сим откланиваюсь...