Глава 10. Управление сервисами в systemd. 10.1. Вступление.

(Перевод документации по RHEL)
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 запускает сервис, он подключает его к стандатртному вводу в /de/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.

Глава 10. Управление сервисами в systemd. 10.1. Вступление.: 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *