MyTetra Share
Делитесь знаниями!
Управление службами Linux с помощью systemd
Время создания: 10.12.2021 11:43
Текстовые метки: linux, systemd, systemctl, управление, настройка, служба, сервис
Раздел: Компьютер - Linux - Управление сервисами (демонами)
Запись: xintrea/mytetra_syncro/master/base/1639125793bpc0egwqwh/text.html на raw.github.com

Управление службами


В среде ОС Linux для управления службами, точками монтирования и т. п. применяется системный менеджер systemd. Менеджер systemd обеспечивает параллельный запуск служб в процессе загрузки ОС, использует сокеты и активацию D-Bus для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает запуск служб, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций.


Отличительной особенностью systemd является использование контрольных групп Linux, обеспечивающих иерархическую структуризацию служб: любая запущенная служба помещается в отдельную контрольную группу с уникальным идентификатором. Когда служба запускает другую зависимую службу, то она автоматически включается в группу с тем же идентификатором. При этом непривилегированные службы не могут изменить свое положение в иерархии. При штатном завершении работы службы будут завершены и все зависимые от нее службы.



Общие сведения


Менеджер systemd оперирует специально оформленными файлами конфигурации — юнитами (unit). Каждый юнит отвечает за конкретную службу (*.service), точку монтирования (*.mount), устройство (*.device), файл подкачки (*.swap), сокет (*.socket) и т. д.


Размещаются юниты в одном из каталогов:


  • /usr/lib/systemd/system/ — юниты из установленных пакетов;
  • /run/systemd/system/ — юниты, созданные в режиме рантайм. Данные юниты имеют приоритет выше, чем юниты из установленных пакетов;
  • /etc/systemd/system/ — юниты, созданные и управляемые администратором. Данные юниты имеют приоритет выше, чем юниты, созданные в режиме рантайм.


Для отслеживания и контроля состояния менеджера systemd и юнитов используется утилита командной строки systemctl.


Для просмотра списка установленных юнитов выполнить команду:


systemctl list-unit-files


Для просмотра списка запущенных юнитов выполнить команду:


systemctl list-units


или для просмотра списка запущенных юнитов определенного типа использовать данную команду с параметром -t <тип_юнита>:


systemctl list-units -t service


Основные параметры для использования с утилитой командной строки systemctl приведены в таблице 5.



Таблица 5



Параметр

Описание

systemctl start <юнит>

Незамедлительно запустить юнит

systemctl stop <юнит>

Незамедлительно остановить юнит

systemctl restart <юнит>

Перезапустить юнит

systemctl reload <юнит>

Перезагрузить настройки юнита

systemctl status

Вывести общую информацию о состоянии системы и список юнитов, которым соответствуют запущенные процессы. При запуске команды с именем юнита будет выведена информация о статусе данного юнита

systemctl cat <юнит>

Показать содержимое юнита

systemctl is-enabled <юнит>

Проверить включение юнита в автозапуск при загрузке системы

systemctl enable <юнит>

Добавить юнит в автозапуск при загрузке системы

systemctl disable <юнит>

Удалить юнит из автозапуска при загрузке системы

systemctl mask <юнит>

Маскировать юнит для исключения возможности его запуска

systemctl unmask <юнит>

Снять маску юнита

systemctl help <юнит>

Показать страницу руководства man юнита (при наличии поддержки данной функции для указанного юнита)

systemctl daemon-reload

Перезагрузить systemd для поиска новых или измененных юнитов

systemctl –failed

Показать список юнитов, которые не были запущены из-за ошибки



Конфигурационные файлы systemd


При использовании менеджера systemd возможно как корректировать существующие

юниты, так и создавать новые.


Юнит представляет собой ini-подобный файл, имя которого состоит из имени юнита и суффикса, определяющего тип юнита. В общем случае юнит-файл включает секции [Unit] и [Install], а также дополнительные секции, соответствующие конкретному типу юнита.


Секция [Unit] содержит описание юнита, а также информацию о зависимостях при запуске юнита:


  • Description= — описание юнита;
  • Wants= — зависимость требования запуска. Требование исходного юнита запустить юнит, указанный в параметре. При этом результат запуска юнита, указанного в параметре, не влияет на запуск исходного юнита. При отсутствии параметров After= и Before= юниты будут запущены одновременно;
  • Requires= — зависимость требования запуска. Требование исходного юнита запустить юнит, указанный в параметре. При этом ошибка запуска юнита, приведенного в параметре, приведет к ошибке запуска исходного юнита. При отсутствии параметров After= и Before= юниты будут запущены одновременно;
  • After= — зависимость порядка запуска. Дополнительный, но не обязательный параметр к параметрам Wants= и Requires=, указывающий на необходимость запуска исходного юнита только после запуска юнита, указанного в параметре. При этом если данный параметр используется с параметром Wants=, то исходный юнит будет запущен вне зависимости от результата запуска юнита, указанного в параметре;
  • Before= — аналогичен параметру After=, только определяет запуск исходного юнита до запуска юнита, указанного в параметре.


Секция [Install] содержит информацию об установке юнита. Используется командами systemctl enable <юнит> и systemctl disable <юнит>. Может содержать следующие параметры:


  • Alias= — список альтернативных имен юнита, разделенных пробелом. Имена должны иметь тот же суффикс, что и имя файла юнита. При использовании команды systemctl enable будут созданы символические ссылки из перечисленных имен на данный юнит. ВНИМАНИЕ! Не все типы юнитов могут иметь альтернативные имена. Для типов *.mount, *.slice, *.swap и *.automount данный параметр не поддерживается;
  • WantedBy= — указывает на целевое состояние (см. 3.1.3), при котором запускается данный юнит. При использовании команды systemctl enable будет добавлена символическая ссылка в <имя_состояния>.target;
  • Also= — определяет список юнитов, которые также будут добавлены в автозапуск или удалены из автозапуска вместе с данным юнитом.


Секция [Service] в юните службы содержит следующие параметры:


1) Type= — определяет тип запуска службы:

а) simple — используется по умолчанию. Служба будет запущена незамедлительно. Процесс при этом не должен разветвляться. Не рекомендуется использовать данный тип, если другие службы зависят от очередности при запуске данной службы. Исключение — активация сокета;

б) forking — служба запускается однократно и процесс разветвляется с завершением родительского процесса. Рекомендуется использовать данный тип для запуска классических демонов. Потребуется также определить PIDFile, чтобы менеджер systemd мог отслеживать основной процесс;

в) oneshot — используется для скриптов, которые завершаются после выполнения одного задания;

г) notify — аналогичен типу simple, но дополнительно демон отправит менеджеру systemd сигнал о своей готовности;

д) dbus — сервис находится в состоянии готовности, когда определенное BusName появляется в системной шине DBus;

е) idle — менеджер systemd отложит выполнение службы до момента отправки всех заданий;

2) PIDFile= — расположение pid-файла;

3) WorkingDirectory= — рабочий каталог приложения;

4) User= — пользователь, от имени которого будет запущена служба;

5) Group= — группа, от имени которой будет запущена служба;

6) OOMScoreAdjust= — приоритет завершения процесса при нехватке памяти, где 1000 — максимальное значение, означающее полный запрет на завершение процесса;

7) ExecStop= — указывает на скрипт, который должен быть выполнен перед остановкой службы;

8) ExecStart — указывает на команду, которая должна быть выполнена после запуска службы;

9) RemainAfterExit — предписывает systemd считать процесс активным после его завершения.


Секция [Socket] в юните сокета определяет следующие параметры для управления сокетом:


  • ExecStart= — правило запуска;
  • ExecReload= — правило перезапуска;
  • KillMode= — правило завершения;
  • Restart= — правило перезапуска при возникновении ошибки.



Целевое состояние


В systemd уровни запуска файлов реализованы в виде сгруппированных юнитов, представляющих целевое состояние (цель). Каждая цель имеет собственное имя вида <имя_состояния>.target и предназначена для конкретных задач. Одновременно могут быть активны несколько целей.


Цели могут наследовать все службы других целей, добавляя к ним свои. В systemd также имеются цели, имитирующие общие уровни запуска SystemVinit, поэтому для переключения между целевыми юнитами можно использовать команду:


telinit RUNLEVEL


Для определения доступных целевых состояний используется команда:


systemctl list-unit-files --type=target


Для определения активных целевых состояний используется команда:


systemctl list-units --type=target


Для перехода в целевое состояние используется команда:


systemctl isolate <имя_состояния>.target


Данная команда изменят только текущий уровень выполнения и ее действие не повлияет на последующие загрузки системы.


Для просмотра целевого состояния по умолчанию, которое systemd использует сразу

после загрузки системы, использовать команду:


systemctl get-default


Целевое состояние по умолчанию задается символьной ссылкой:


/etc/systemd/system/default.target


Для смены целевого состояния по умолчанию требуется перезаписать данную ссылку.



Примеры:


1.

ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target


2.

ln -sf /usr/lib/systemd/system/graphical.target /etc/systemd/system/default.target



Для просмотра дерева зависимостей юнитов от цели выполнить команду:


systemctl list-dependencies <имя_состояния>.target


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования