|
||||||||||||||||||||||||||||||
Управление службами 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) и т. д. Размещаются юниты в одном из каталогов:
Для отслеживания и контроля состояния менеджера systemd и юнитов используется утилита командной строки systemctl. Для просмотра списка установленных юнитов выполнить команду: systemctl list-unit-files Для просмотра списка запущенных юнитов выполнить команду: systemctl list-units или для просмотра списка запущенных юнитов определенного типа использовать данную команду с параметром -t <тип_юнита>: systemctl list-units -t service Основные параметры для использования с утилитой командной строки systemctl приведены в таблице 5. Таблица 5
Конфигурационные файлы systemd При использовании менеджера systemd возможно как корректировать существующие юниты, так и создавать новые. Юнит представляет собой ini-подобный файл, имя которого состоит из имени юнита и суффикса, определяющего тип юнита. В общем случае юнит-файл включает секции [Unit] и [Install], а также дополнительные секции, соответствующие конкретному типу юнита. Секция [Unit] содержит описание юнита, а также информацию о зависимостях при запуске юнита:
Секция [Install] содержит информацию об установке юнита. Используется командами systemctl enable <юнит> и systemctl disable <юнит>. Может содержать следующие параметры:
Секция [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] в юните сокета определяет следующие параметры для управления сокетом:
Целевое состояние В 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 |
||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
|