Васильев Андрей Михайлович, 2024
Версии презентации
Служба обычно представляет собой некоторое приложение, которое постоянно запущено и которое предоставляет полезные услуги пользователю или другим приложениям
Службы также могут представлять собой действия, выполняющиеся с некоторой регулярностью, например по расписанию
Точное указание зависимостей позволяет ускорить загрузку системы, избежать проблем при запуске служб
Вопрос запуска службы помимо момента запуска достаточно сложный:
Помимо запуска есть много вопросов поддержки работы:
Задача настройки параметров запуска службы достаточно сложная, разработчиками SysVInit решена не была, поэтому процесс запуска служб делегировали Shell-скриптам
Каждый из последних потребуют написания своей конфигурации
Для описания всех компонентов systemd используются файлы модулей (unit), в которых описывается поведение конкретного компонента. В настоящий момент systemd поддерживает следующие виды модулей:
Тип модуля | Описание |
---|---|
Target | Синхронизационная точка для ряда модулей. Используется во время загрузки системы в определённом состоянии. |
Service | Модуль, который запускает, останавливает, перезапускает, даёт команду на обновление конфигурации различных служб, например Веб-сервер. |
Timer | Модуль данного типа активирует или деактивирует указанную службу по времени наступления таймера или истечения времени. |
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. |
Список можно посмотреть в 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 являются текстовыми файлами в формате INI
systemd.unit
, systemd.service
, systemd.timer
и т.д[Unit]
Description=Start n service
After=default.target
[Service]
Type=simple
ExecStart=/usr/bin/n
[Install]
WantedBy=default.target
Unit
описывает общую информацию о службе, часть unit-файлов
Description
— краткое описание назначения службеAfter
— указание зависимости одной службы от другойInstall
описывает параметры автоматического запуска службы при старте системы, часть unit-файлов
Type
— поведение приложения после запускаWantedBy
— указание зависимости от цели запускаService
описывает детали запуска службы
ExecStart
— команда для запуска приложения, должна включать полный путь к исполняемому файлу, может включать аргументыТребований к параметрам работы служб много — скорее всего на настоящий момент в systemd есть поддержка для решения данной задачи
Если не указать пользователя, то приложение будет работать с правами суперпользователя, что является проблемой для большинства служб
В секции Service
необходимо указать пользователя с помощью параметра User
Служба не всегда ведёт себя как следует и может упасть. Политика перезапуска определяется в секции Service
с помощью параметра Restart
on-failure
— перезапускать в случае паденияalways
— перезапускать даже когда хорошо завершилось/etc/systemd/system
.service
example.service
[Unit]
, указав описание и зависимости[Service]
, указав параметры запуска приложения[Install]
, указав параметры автоматического запускаsystemctl daemon-reload
systemctl start example
или целиком systemctl start example.service
systemctl status example
Для остановки службы используйте команду systemctl stop example
Команды start
и stop
приложения systemctl
пытаются запустить или остановить процесс, который находится под управлением systemd
Для настройки автоматического запуска необходимо:
[Install]
внутри конфигурационного файлаsystemctl enable example.service
Последняя команда настраивает запуск службы при старте ОС, не запускает её сейчас
start
--now
: systemctl enable --now example.start
. В этом случае будет настроен автоматический запуск при старте и будет выполнена попытка запуска службы сейчасДля выключения автоматического systemctl disable example
или systemctl disable --now example
Анализ поведения системы
Дейтвие | Команда |
---|---|
Отобразить состояние 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 |