Управление службами в GNU/Linux #

Васильев Андрей Михайлович, 2022

Версии презентации

Загрузка системы #

flowchart TB power("Подача питания") bios["Загрузка микрокода материнской платы"] hw_init["Инициализация ключевых компонентов"] loader_search["Поиск загрузчика"] loader_init["Передача управления загрузчику"] os_init["Загрузка ядра ОС"] power --> bios bios --> hw_init --> loader_search --> loader_init --> os_init

Существует несколько стандартов для реализации систем загрузки

  • 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/*