Управление службами в GNU/Linux #
Васильев Андрей Михайлович, 2022
Версии презентации
Загрузка системы #
Существует несколько стандартов для реализации систем загрузки
- 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 #
Анализ поведения системы
Дейтвие | Команда |
---|---|
Show system status | systemctl status |
List running units | systemctl or systemctl list-units |
List failed units | systemctl –failed |
List installed unit files1 | systemctl list-unit-files |
Show process status for a PID | systemctl status pid |
Анализ поведения службы
Дейтвие | Команда | Комментарий |
---|---|---|
Show a manual page associated with a unit | systemctl help unit | as supported by the unit |
Status of a unit | systemctl status unit | including whether it is running or not |
Check whether a unit is enabled | systemctl is-enabled unit |
Управление состоянием службы
Дейтвие | Команда |
---|---|
Start a unit immediately | systemctl start unit as root |
Stop a unit immediately | systemctl stop unit as root |
Restart a unit | systemctl restart unit as root |
Reload a unit and its configuration | systemctl reload unit as root |
Reload systemd manager configuration2 | systemctl daemon-reload as root |
Дейтвие | Команда |
---|---|
Enable a unit to start automatically at boot | systemctl enable unit as root |
Enable a unit to start automatically at boot and start it immediately | systemctl enable –now unit as root |
Disable a unit to no longer start at boot | systemctl disable unit as root |
Reenable a unit3 | systemctl reenable unit as root |
Управление состоянием системы #
Дейтвие | Команда |
---|---|
Shut down and reboot the system | systemctl reboot |
Shut down and power-off the system | systemctl poweroff |
Suspend the system | systemctl suspend |
Put the system into hibernation | systemctl hibernate |
Put the system into hybrid-sleep state (or suspend-to-both) | systemctl hybrid-sleep |
Указание зависимостей #
- В классическом SysVInit необходимо было следить за включением службы в нужный уровень выполнения
- В рамках systemd каждая служба указывает список зависимостей
- Явные зависимости от других служб
- Неявные зависимости через включение в конкретную цель
Настройка systemd #
Для описания всех компонентов systemd используются unit-файлы, в которых описывается поведение конкретного компонента. В настоящий момент systemd поддерживает следующие виды unit-файлов:
Unit type | Description |
---|---|
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
- System Unit Search Path
- /etc/systemd/system.control/*
- /run/systemd/system.control/*
- /etc/systemd/system/* - Файлы, созданные администратором
- /run/systemd/system/*
- /lib/systemd/system/* - Файлы, установленные вместе с пакетом приложения
- …
- User Unit Search Path
- ~/.config/systemd/user.control/*
- ~/.config/systemd/user/*
- $XDG_CONFIG_DIRS/systemd/user/*
- /etc/systemd/user/*
- $XDG_RUNTIME_DIR/systemd/user/*
- /run/systemd/user/*
- …