Управление службами в GNU/Linux #
Васильев Андрей Михайлович, 2023
Версии презентации
Загрузка системы #
Существует несколько стандартов для реализации систем загрузки
- BIOS, Basic Input Output System
- UEFI, Unified Extensible Firmware Interface
- EFI, Extensible Firmware Interface
- Множество закрытых решений
Загрузчик ОС #
Задачей загрузчика ОС является поиск ядра ОС с дальнейшей передачей ядру управления. Загрузчик может иметь интерактивный интерфейс для выбора вариантов ОС для загрузки
В GNU/Linux для загрузки ОС применяется связка из
- ядра ОС, являющегося бинарным исполняемым файлом
- initrd, Initial RAM Disk, образа временной файловой системы, необходимой ядру для дальнейшей загрузки системы
В рамках initrd поставляются:
- Модули ядра ОС, необходимые для работы с оборудованием на данном компьютере
- Служебные приложения, нужные для загрузки модулей и настройки системы
Загрузка ОС #
В рамках загрузки ядра ОС происходит поиск всего оборудования и его инициализация
После того как всё оборудование готово к работе, ядро запускает процесс-инициализации init
Существует множество систем инициализации:
- SysVinit
- systemd
- openrc
- runit
- initware
Сравнение разных систем предоставляет проект Gentoo
Задачи системы инициализации #
- Запуск служб
- При запуске системы
- По запросу функций службы
- Перезапуск служб в случае их падения
Система инициализации может также выполнять действия других системных служб
- Подключение файловых систем (обычно да)
- Настройка сетевых интерфейсов (обычно нет)
- Запуск задач по расписанию (обычно нет)
- Журналирование работы служб (обычно нет)
- Управление входом пользователей в систему (обычно нет)
- Создание виртуальных файлов для устройств (обычно нет)
- Управление временем системы (обычно нет)
Стадии загрузки ОС #
При запуске системы обычно рассматриваются следующие стадии
- Настройка ключевых служб, поддержка работы сессии суперпользователя
- Поддержка работы множества пользователе
- Поддержка работы с графическим пользовательским интерфейсом
Также система инициализации должна выполнять корректное выключение системы, т.е. выключать службы в правильном порядке
- Завершение работы
- Перезагрузка системы
Варианты реализации стадий #
SysV Runlevel | systemd Target | Notes |
---|---|---|
0 | poweroff.target, runlevel0.target | Halt the system. |
1, s, single | rescue.target, runlevel1.target | Single user mode. |
2, 4 | multi-user.target, runlevel2.target, runlevel4.target | User-defined/Site-specific runlevels. By default, identical to 3. |
3 | multi-user.target, runlevel3.target | Multi-user, non-graphical. Users can usually login via multiple consoles or via the network. |
5 | graphical.target, runlevel5.target | Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login. |
6 | reboot.target, runlevel6.target | Reboot |
emergency | emergency.target | Emergency shell |
Службы #
Служба обычно представляет собой некоторое приложение, которое постоянно запущено и которое предоставляет полезные услуги пользователю или другим приложениям
- Приложение реагирует на некоторые сигналы и выполняет некоторые действия
- Сигнал от ядра ОС о добавлении нового устройства
- Сигнал по шине взаимодействия, запрос на выполнение операции
- Сигнал по сетевому интерфейсу, выполнение действия
- Приложению для работы необходимо, чтобы все его зависимости были доступны на момент запуска
- Файловая система с файлами службы уже доступна на момент запуска службы
- Сетевой интерфейс уже настроен и готов обрабатывать запросы
- Служба базы данных запущена и готова обрабатывать запросы
Службы также могут представлять собой действия, выполняющиеся с некоторой регулярностью
Настройка systemd #
Для описания всех компонентов systemd используются файлы модулей (unit), в которых описывается поведение конкретного компонента. В настоящий момент systemd поддерживает следующие виды модулей:
Тип модуля | Описание |
---|---|
Target | A group of units that defines a synchronization point. The synchronization point is used at boot time to start the system in a particular state. |
Service | A unit of this type starts, stops, restarts or reloads a service daemon such as Apache webserver. |
Timer | A unit of this type activates/deactivates specified service based on a timer or when the set time is elapsed. |
Socket | A unit of this type activates a service when the service receives incoming traffic on a listening socket. |
Device | A unit of this type implements device-based activation such as a device driver. |
Тип модуля | Описание |
---|---|
Mount | A unit of this type controls the file-system mount point. |
Automount | A unit of this type provides and controls on-demand mounting of file systems. |
Swap | A unit of this type encapsulates/activates/deactivates swap partition. |
Path | A unit of this type monitors files/directories and activates/deactivates a service if the specified file or directory is accessed. |
Snapshot | A unit that creates and saves the current state of all running units. This state can be used to restore the system later. |
Slice | A group of units that manages system resources such as CPU, and memory. |
Scope | A unit that organizes and manages foreign processes. |
busname | A unit that controls DBus system. |
Каталоги конфигурации systemd #
Список можно посмотреть в man-руководстве systemd.unit
- Пути для поиска модулей системного уровня
/etc/systemd/system.control/*
/run/systemd/system.control/*
/etc/systemd/system/*
— Файлы, созданные администратором/run/systemd/system/*
/lib/systemd/system/*
— Файлы, установленные вместе с пакетом приложения- …
- Пути для поиска модулей пользовательского уровня
~/.config/systemd/user.control/*
~/.config/systemd/user/*
$XDG_CONFIG_DIRS/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
- …
Управление службами systemd #
Анализ поведения системы
Дейтвие | Команда |
---|---|
Отобразить состояние systemd | systemctl status |
Отобразить список запущенных модулей | systemctl или systemctl list-units |
Отобразить список упавших модулей | systemctl --failed |
Отобразить список конфигурационных файлов модулей | systemctl list-unit-files |
Отобразить статус модуля по PID процесса | systemctl status PID |
Анализ поведения службы
Дейтвие | Команда | Комментарий |
---|---|---|
Отобразить страницу руководства, ассоциированную с данной службой | systemctl help UNIT |
если указана в конфигурации модуля |
Отобразить статус модуля | systemctl status UNIT |
показывает запущен или остановлен модуль |
Проверить включён ли модуль | systemctl is-enabled UNIT |
Управление состоянием службы. Все в данном разделе требуют прав суперпользователя
Дейтвие | Команда |
---|---|
Запустить модуль | systemctl start UNIT |
Остановить работу модуля | systemctl stop UNIT |
Перезапустить модуль | systemctl restart UNIT |
Дать команду службе перечитать конфигурацию | systemctl reload UNIT |
Перечитать конфигурацию systemd | systemctl daemon-reload |
Настроить автоматический запуск модуля при старте системы | systemctl enable UNIT |
Настроить автоматический запуск модуля при старте системы и сразу запустить его | systemctl enable --now UNIT |
Отключить автоматический запуск модуля при старте системы | systemctl disable UNIT |
Отключить и настроить автоматический запуск модуля | systemctl reenable UNIT |
Управление состоянием системы #
Данные действия надо выполнять от имени суперпользователя
Дейтвие | Команда |
---|---|
Выключить ОС и перезагрузить компьютер | systemctl reboot |
Выключить ОС и обесточить компьютер | systemctl poweroff |
Приостановить работу ОС с сохранением данных в оперативной памяти | systemctl suspend |
Приостановить работу ОС с сохранением данных в разделе подкачки | systemctl hibernate |
Приостановить работу ОС с гибридным сохранением состояния | systemctl hybrid-sleep |
Указание зависимостей #
- В классическом SysVInit необходимо было следить за включением службы в нужный уровень выполнения
- В рамках systemd каждая служба указывает список зависимостей
- Явные зависимости от других служб
- Неявные зависимости через включение в конкретную цель