MyTetra Share
Делитесь знаниями!
10.1 Вступление
Время создания: 10.04.2024 11:14
Текстовые метки: linux, systemd, сервис, управление
Раздел: Компьютер - Linux - Управление сервисами (демонами) - Документация RedHat по systemd
Запись: xintrea/mytetra_syncro/master/base/171273689138yfqfycbq/text.html на raw.github.com

10.1. Вступление

Systemd – это системный и сервисный менеджер для операционных систем Linux. Он сохраняет обратную совместимость со сценариями инициализации SysV и предоставляет ряд функций, таких как параллельный запуск системных служб во время загрузки, активация демонов по требованию или логика управления сервисами на основе зависимостей. В Red Hat Enterprise Linux 7 systemd заменяет Upstart как систему инициализации по умолчанию.

Systemd вводит понятие юнитов. Юниты представлены файлами конфигурации, расположенными в одном из каталогов, перечисленных в таблице 10.2, «Расположение файлов юнитов Systemd» и содержат информацию о системных службах, прослушиваемых сокетах и других объектах, имеющих отношение к системе инициализации. Полный список доступных типов юнитов systemd см. В таблице 10.1 «Доступные типы юнитов systemd».


Таблица 10.1 Доступные типы юнитов systemd



Тип юнита


Расширение файла


Описание


Service unit


.service


Системные сервисы


Target unit (далее – таргет)


.target


Группа юнитов systemd


Automount unit


.automount


Точка автомонтирования файловой системы


Device unit


.device


Файл устройства, распознанного ядром


Mount unit


.mount


Точка монтирования файловой системы


Path unit


.path


Файл или директория в файловой системе


Scope unit


.scope


Процессы созданные извне


Slice unit


.slice


Группа иерархически организованных юнитов, которые управляют системными процессами.


Snapshot unit


.snapshot


Сохраненное состояние менеджера systemd


Socket unit


.socket


Сокет для межпроцессного взаимодействия


Swap unit


.swap


Swap-устройство или swap-файл


Timer unit

.timer

Таймер systemd


Таблица 10.2. Расположение файлов юнитов systemd



Директория


Описание


/usr/lib/systemd/system/


Файлы юнитов systemd, помещенные сюда

при установке RPM-пакетов


/run/systemd/system/


Юниты systemd созданные в рантайме.

Эта директория имеет приоритет

над директорией /usr/lib/systemd/system/


/etc/systemd/system/


Файлы юнитов systemd, созданные с помощью systemctl,

а также файлы юнитов, добавленных for extending a service.

Эта директория имеет приоритет над директорией

/run/systemd/system/


Переопределение дефолтной конфигурации systemd с использованием system.conf

Дефолтная конфигурация systemd определяется во время компиляции и ее можно найти в файле конфигурации /etc/systemd/system.conf. Используйте этот файл, если вы хотите отклониться от дефолтных настроек и перезаписать глобальные значения по умолчанию для юнитов systemd.

Например, чтобы переопределить дефолтное значение таймаута, которое установлено в 90 секунд, используйте параметр DefaultTimeoutStartSec для ввода необходимого значения.


DefaultTimeoutStartSec=required value


Здесь required value – требуемое значение в секундах.

Смотрите также Example 10.21, “Changing the timeout limit”.


10.1.1. Основные функции

В Red Hat Enterprise Linux 7 система systemd и менеджер сервисов предоставляют следующие основные функции:

  • Активация, основанная на сокетах – Во время загрузки systemd создает прослушиваемые сокеты для всех системных сервисов которые поддерживают этот тип активации, и передает сокеты этим сервисам сразу после их запуска. Это не только позволяет системе запускать службы параллельно, но также позволяет перезапустить службу, не теряя при этом сообщения, отправленные на него, пока оно недоступно: соответствующий сокет остается доступным и все сообщения помещаются в очередь.
  • Systemd использует .socket юниты для активации, основанной на сокетах.

  • Активация, основанная основе шины (D-Bus)- Системные службы, использующие D-Bus для межпроцессного взаимодействия, могут запускаться по требованию при первой попытке клиентского приложения связаться с ними. Systemd использует служебные файлы D-Bus для активации на основе шины.
  • Активация на основе устройств – Системные службы, поддерживающие активацию на основе устройств, могут запускаться по требованию, когда подключается или становится доступным определенный тип оборудования. Systemd использует .device юниты для активации на основе устройств.
  • Активация на основе пути – Системные службы, поддерживающие активацию на основе пути, могут запускаться по требованию, когда определенный файл или каталог изменяет свое состояние. Systemd использует .path юниты для активации на основе пути.
  • Управление точками монтирования и автомонтирования – Systemd контролирует и управляет точками монтирования и автомонтирования. Для этого systemd использует юниты .mount или .automount соответственно.

  • Агрессивная параллелизация – Из-за использования активации на основе сокетов systemd может запускать системные службы параллельно, как только все прослушивающие сокеты находятся на своем месте. В сочетании с системными службами, поддерживающими активацию по требованию, параллельная активация значительно сокращает время, необходимое для загрузки системы.
  • Транзакционная логика активации юнитов – До активации или деактивации юнита systemd вычисляет зависимости, создает временную транзакцию и проверяет, что эта транзакция является последовательной. Если транзакция непоследовательна, systemd автоматически пытается ее исправить и удалить из нее ненужные задания перед сообщением об ошибке.
  • Обратная совместимость с SysV init – Systemd поддерживает сценарии инициализации SysV, как описано в Базовой спецификации Linux Standard, что упрощает переход к systemd.



10.1.2. Изменения совместимости


Система systemd и диспетчер сервисов разработаны с учетом совместимости с системами инициализации SysV и Upstart. Ниже перечислены наиболее заметные изменения по сравнению с предыдущим мажорным релизом системы Red Hat Enterprise Linux:


  • Systemd имеет ограниченную поддержку ранлевелов. Он предоставляет номера таргетов, которые могут быть сопоставлены с ранлевелами для совместимости, просмотреть какому ранлевелу соответствует текущий таргет можно командой runlevel. Не все таргеты systemd могут быть сопоставлены с ранлевелом. В случае, если ранлевел не может быть сопоставлен команда вернет значение N. Рекомендуется по возможности избегать применения команды runlevel.
  • Для получения дополнительной информации о таргетах в systemd и их сравнении с уровнями выполнения, см. Раздел 10.3 “Работа с таргетами в systemd”.
  • Утилита systemctl не поддерживает пользовательские команды. Помимо стандартных команд, таких как start, stop и status, авторы сценариев инициализации SysV предоставляют поддержку любого количества команд для обеспечения дополнительной функциональности. Например, init-скрипт для iptables в Red Hat Enterprise Linux 6 может быть выполнен с командой panic, которая сразу же активирует режим паники и перенастроит систему так, что начнется удаление всех входящих и исходящих пакетов. В systemd такое не поддерживается, утилита systemctl принимает только задокументированные команды.
  • Для получения дополнительной информации об утилите systemctl и ее сравнении с предыдущей утилитой service см. Раздел 10.2 Управление системными сервисами.
  • Утилита systemctl не взаимодействует со службами, которые не были запущены через systemd. Когда systemd запускает системный сервис, он сохраняет идентификатор основного процесса, чтобы отслеживать его. Утилита systemctl затем использует этот PID для запроса и управления сервисом. Т.е., если пользователь запускает конкретный демон непосредственно в командной строке, systemctl не может определить его текущий статус или остановить его.
  • Systemd останавливает только запущенные сервисы. Ранее, когда инициализировался процесс выключения, RHEL 6 и предыдущие релизы символические ссылки, расположенные в директории /etc/rc0.d/ чтобы остановить все доступные сервисы независимо от их статуса. В systemd только запущенные сервисы завершаются при выключении.
  • Системные сервисы недоступны для чтения из стандартного потока ввода. Когда systemd запускает сервис, он подключает его к стандартному вводу в /dev/null чтобы предотвратить какое-либо взаимодействие с пользователем.
  • Системные сервисы не наследуют никакого контекста (таких, как переменные среды PATH и HOME) от вызывающего их пользователя или его сессии. Каждый сервис запускается в чистом контексте выполнения.
  • При загрузке init-скрипта SysV, systemd считывает информацию о зависимостях из заголовка Linux Standard Base (LSB) и интерпретирует ее во время выполнения.
  • Для всех операций с service-юнитами установлен тайм-аут по умолчанию 5 минут, чтобы предотвратить сбой сервиса из-за зависания системы. Это значение жестко запрограммировано для служб, которые генерируются из скриптов инициализации и не может быть изменено. Однако могут использоваться отдельные конфигурационные файлы для указания более длительного времени ожидания определенного сервиса, см Example 10.21, “Changing the timeout limit”


Подробный список изменений, введенных с systemd см. Migration Planning Guide for Red Hat Enterprise Linux 7.

 
MyTetra Share v.0.59
Яндекс индекс цитирования