Перейти к содержимому

Введение в systemd. Сервисы, юниты

Введение

В последнее время многие дистрибутивы Linux перешли на systemd с других демонов инициализации (например, upstart). Systemd является гибким и быстрым инструментом для управления сервером с момента загрузки.

В данном руководстве мы рассмотрим наиболее важные команды для управления сервером с systemd.

Требования

Скалет с ОС версии не ниже, чем следующие:

  • Ubuntu 15.04
  • Debian 8
  • CentOS 7
  • Fedora 15

Управление юнитами

Базовый объект, которым управляет systemd — это юнит (unit). Юниты могут быть многих типов, но самый часто используемый тип юнита — это сервис (название оканчивается на «.service»). Для управления сервисами используется команда systemctl. Все команды обычного демона инициализации имеют аналог в systemctl. Продемонстрируем работу с данной командой на примере сервиса nginx.service.

Для начала, мы можем запустить сервис:

Также, мы можем остановить его:

Или перезапустить:

Мы можем перечитать конфигурационные файлы без перезапуска сервиса с помощью команды:

Включение/отключение юнитов

По умолчанию, большинство юнитов не стартует автоматически при загрузке системы. Для конфигурирования этого поведения, необходимо включить юнит. Для того, чтобы сервис запускался автоматически при загрузке выполните команду:

Для отключения сервиса:

Получение состояния системы

Это очень значимая возможность systemd. Для примера, выведем список всех юнитов, числящихся активными в systemd:

Пример вывода:

UNIT: имя юнита LOAD: прочитан ли юнит systemd — загружен ли в память ACTIVE: состояние юнита — был ли успешно запущен SUB: более низкоуровневое и точное описание состояния юнита DESCRIPTION: текстовое описание предназначения юнита

Для вывода юнитов, которые загружены, или для которых была произведена попытка загрузки в память, но которые неактивны в данный момент, добавим параметр —all:

Для вывода всех юнитов в системе, выполните:

Запрос состояния юнитов

Имеется также возможность получить информацию о состоянии отдельных юнитов.

Для показа состояния юнита, информации о процессе и последних записей лога — выполните (nginx.service — пример юнита):

Чтобы проверить, активен ли юнит в данный момент:

Для проверки, включен ли юнит, выполните команду:

Для вывода всех записей лога:

Чтобы ограничить вывод последней загрузкой запустите, как обычно, с параметром -b:

Инспектирование юнитов и юнит-файлов

У юнит-файлов есть и другие параметры, используемые systemd для управления ими. Для вывода полного содержимого юнит-файла выполните:

Вывод дерева зависимостей юнита (то есть то, какие юниты будут запущены при старте указанного [юнита]):

 Для того, чтобы рекурсивно раскрыть зависимости второго и более уровней — добавьте параметр —all:

Вывод низкоуровневой информации о юните (со значениями каждого параметра, используемого systemd):

Модификация юнит-файлов

При возникновении необходимости модификации юнит-файла, systemd предоставляет возможность сделать это напрямую — с помощью systemctl, без необходимости искать файл юнита на диске.

Для создания сниппета юнит-файла (сниппет может дополнять или перекрывать содержимое юнит-файла по умолчанию), выполните команду:

В случае необходимости модификации существующего содержимого юнит-файла, вместо создания сниппета, нужен параметр —full:

После модификации юнит-файла, необходимо перезагрузить процесс самого systemd, для подхвата изменений:

Цели (уровни выполнения)

Одной из традиционных функций систем инициализации в Linux является помещение системы в то или иное состояние. В классических системах инициализации, эти состояния называются уровнями выполнения (в отдельный момент выполнения система может быть только на одном уровне выполнения).

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

Вывод всех целей, доступных в системе:

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

Для изменения цели, привязанной к этапу загрузки, выполните:

Вывод юнитов, привязанных к указанной цели:

Отключение и перезагрузка сервера

Отключение:

Перезагрузка:

Загрузка в режим восстановления:

Заключение

Итак, мы рассмотрели базовую функциональность утилиты systemctl. В следующих руководствах будут рассмотрены работа с journalctl и некоторые другие аспекты systemd.

Опубликовано вLinux

Ваш комментарий будет первым

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

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