Ненависть — это гнев слабых (А. Додэ).

Systemd

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

Название systemd образовано от слова system и буквы d, традиционно используемой в Unix/Linux для обозначения фоновых процессов — daemon. Поэтому systemd можно понимать как системный демон, однако фактически это гораздо больше, чем один процесс: проект представляет собой набор взаимосвязанных компонентов и инструментов.

Главная задача systemd — организовать запуск операционной системы и управление работающими в ней службами. Он определяет, какие компоненты необходимо запустить, в каком порядке они должны быть подготовлены, какие зависимости существуют между ними и что делать при остановке или сбое сервиса.

Что делает systemd при загрузке Linux

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

В процессе загрузки systemd может выполнять множество операций:

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

Почему systemd использует PID 1

В Linux процесс с идентификатором PID 1 имеет особое значение. Это первый процесс пользовательского пространства, который запускается ядром. Если система использует systemd, он становится этим процессом.

В такой роли systemd не просто запускает программы. Он также является родительским процессом для определённых процессов, управляет жизненным циклом сервисов и должен оставаться работающим на протяжении всей сессии операционной системы. Официальная документация прямо описывает systemd как system and service manager, работающий в системном режиме как PID 1.

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

Что такое unit в systemd

Основным понятием systemd является unit — единица управления. Вместо того чтобы рассматривать систему исключительно как набор процессов, systemd описывает различные системные ресурсы и действия через units.

Существуют разные типы unit-файлов:

  • .service — системные службы и процессы;
  • .socket — сетевые и IPC-сокеты;
  • .target — группы units, объединённые общей целью;
  • .mount — точки монтирования;
  • .automount — автоматические точки монтирования;
  • .timer — планировщики запуска задач;
  • .path — запуск действий при изменении файлов или каталогов;
  • .device — устройства, обнаруженные системой;
  • .swap — swap-устройства и файлы;
  • .slice — группы для организации и ограничения ресурсов процессов;
  • .scope — группы процессов, управляемые systemd.

Такая архитектура позволяет управлять не только традиционными демонами, но и другими ресурсами операционной системы. Общие параметры units описываются в конфигурации systemd, а конкретные типы имеют собственные настройки.

Что такое systemd service

Наиболее часто пользователи сталкиваются с units типа .service. Такой unit описывает процесс или группу процессов, которыми управляет systemd. Конфигурация service unit содержит сведения о том, какую программу необходимо запустить, от какого пользователя она должна работать, когда её запускать и как контролировать её состояние.

Например, служба может быть представлена файлом:

[Unit]
Description=Example Service
After=network.target

[Service]
ExecStart=/usr/local/bin/example
Restart=on-failure

[Install]
WantedBy=multi-user.target

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

Как управлять службами через systemctl

Для управления systemd обычно используется команда systemctl. Она является основным инструментом администратора для работы с units.

Например, состояние службы можно посмотреть командой:

systemctl status nginx

Запустить службу:

systemctl start nginx

Остановить службу:

systemctl stop nginx

Перезапустить службу:

systemctl restart nginx

Настроить автоматический запуск службы при загрузке:

systemctl enable nginx

Отключить автоматический запуск:

systemctl disable nginx

После изменения unit-файла обычно требуется сообщить systemd перечитать конфигурацию:

systemctl daemon-reload

Команда systemctl также предоставляет низкоуровневый вывод свойств units через systemctl show, что особенно удобно для автоматизации и получения машиночитаемой информации.

Зависимости между службами

Одно из ключевых преимуществ systemd заключается в возможности описывать зависимости между units. Например, веб-серверу может потребоваться сеть, базе данных — файловая система, а определённой службе — другой сервис.

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

Для этого используются параметры вроде:

  • Requires= — указывает на необходимую зависимость;
  • Wants= — задаёт желательную зависимость;
  • After= — определяет порядок запуска;
  • Before= — определяет обратный порядок;
  • Conflicts= — задаёт конфликт между units;
  • PartOf= — позволяет связать жизненный цикл units.

Параллельный запуск служб

Старые системы инициализации часто запускали большое количество служб последовательно. systemd активно использует возможность параллельного запуска независимых компонентов.

Если две службы не зависят друг от друга и их запуск можно выполнять одновременно, systemd способен запускать их параллельно. Это сокращает время загрузки системы и позволяет эффективнее использовать современные многоядерные процессоры. Параллелизация является одной из основных особенностей systemd, прямо заявленных в официальной документации проекта.

Socket activation

Systemd поддерживает socket activation. В такой схеме systemd может заранее открыть сокет, а непосредственно серверный процесс запустить только тогда, когда появляется необходимость обработать соединение.

Это позволяет отделить подготовку коммуникационного интерфейса от запуска самого приложения. Подобная архитектура также может использоваться для запуска сервисов по требованию и уменьшения количества постоянно работающих процессов.

Для этого используются units типа .socket, связанные с соответствующими сервисами.

Что такое target в systemd

target — специальный тип unit, предназначенный для группировки других units и описания определённого состояния системы.

Например, multi-user.target обычно связан с режимом полноценной многопользовательской работы без обязательного графического интерфейса. Графические системы могут использовать graphical.target, который связан с компонентами графической среды.

Вместо старой концепции фиксированных runlevel systemd использует более гибкую систему targets и зависимостей между units.

Systemd и журналы: journalctl

В экосистему systemd входит собственная система журналирования — systemd-journald. Для просмотра записей журнала обычно используется команда journalctl.

Например:

journalctl

Для просмотра сообщений конкретной службы:

journalctl -u nginx

Для просмотра сообщений текущей загрузки системы:

journalctl -b

Журнал особенно полезен при диагностике проблем с запуском служб. Если сервис завершился с ошибкой, через journalctl часто можно найти сообщения процесса и самого менеджера systemd.

При этом systemd — не только сервис-менеджер: официальный проект включает journald и другие компоненты для базового управления системой.

Systemd и контроль ресурсов через cgroups

Systemd тесно интегрирован с механизмом Linux control groups (cgroups). Благодаря этому процессы можно объединять в управляемые группы и применять к ним ограничения и другие параметры.

Это важно не только для обычных серверов, но и для контейнеров, виртуальных машин и приложений, которым необходимо контролировать потребление CPU, памяти и других ресурсов.

Официальная архитектурная документация systemd указывает, что менеджер служб использует cgroups и другие механизмы ядра для управления процессами.

Systemd как набор инструментов

Хотя чаще всего под systemd подразумевают PID 1 и команду systemctl, на самом деле проект значительно шире.

В его экосистему входят компоненты для различных задач:

  • systemd — основной менеджер системы и служб;
  • systemd-journald — системное журналирование;
  • systemd-logind — управление пользовательскими сессиями;
  • systemd-networkd — управление сетевой конфигурацией;
  • systemd-resolved — разрешение DNS-имён;
  • systemd-timesyncd — синхронизация системного времени;
  • systemd-udevd — обработка событий устройств;
  • systemd-tmpfiles — управление временными файлами и каталогами;
  • systemd-timers — запуск задач по расписанию;
  • systemd-nspawn — механизм запуска контейнеров на базе systemd.

Не каждый Linux-дистрибутив включает все компоненты или использует их одинаковым образом. Systemd представляет собой набор базовых строительных блоков, из которых дистрибутив может использовать необходимые ему возможности.

Где находятся unit-файлы

Systemd ищет unit-файлы в нескольких каталогах. В частности, системные конфигурации могут находиться в /etc/systemd/system/, временные runtime-конфигурации — в /run/systemd/system/, а предоставляемые пакетами units обычно находятся в каталогах вроде /usr/lib/systemd/system/.

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

На практике администратору обычно рекомендуется размещать собственные системные unit-файлы в /etc/systemd/system/, чтобы они не смешивались с файлами, установленными пакетным менеджером.

Systemd и автозапуск программ

Одной из распространённых задач systemd является запуск программ автоматически после загрузки системы.

Для этого создаётся service unit, после чего он связывается с соответствующим target. Например, серверное приложение можно настроить таким образом, чтобы оно автоматически запускалось после достижения системой определённого состояния.

При этом enable и start решают разные задачи: systemctl enable настраивает включение unit в соответствующую конфигурацию автозапуска, а systemctl start запускает его непосредственно сейчас.

Чем systemd отличается от старого SysVinit

До широкого распространения systemd во многих Linux-дистрибутивах использовался SysVinit и связанные с ним init-скрипты. Systemd был разработан как более современный менеджер системы и служб и поддерживает совместимость с различными традиционными механизмами Unix, включая SysV и LSB init-скрипты.

Главные архитектурные отличия связаны с моделью units, зависимостями, параллельным запуском, socket activation, интеграцией с cgroups и централизованным управлением состоянием служб.

При этом systemd не обязательно полностью отказывается от старых механизмов: в определённых случаях он способен работать с традиционными init-скриптами.

Почему вокруг systemd было много споров

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

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

Независимо от этих архитектурных дискуссий systemd стал важной частью экосистемы Linux и используется в большом количестве современных дистрибутивов.

Нужно ли пользователю знать systemd

Обычному пользователю Linux не обязательно глубоко разбираться во внутреннем устройстве systemd. Однако базовое знание нескольких команд значительно облегчает администрирование компьютера или сервера.

Минимальный набор команд включает:

  • systemctl status — просмотр состояния;
  • systemctl start — запуск;
  • systemctl stop — остановка;
  • systemctl restart — перезапуск;
  • systemctl enable — включение автозапуска;
  • systemctl disable — отключение автозапуска;
  • journalctl — просмотр системного журнала;
  • systemctl list-units — просмотр загруженных units.

Выводы

systemd — это не просто программа для запуска Linux. Это комплексная системная инфраструктура, центральным элементом которой является менеджер системы и служб, работающий в системном режиме как PID 1.

Он отвечает за запуск и контроль служб, зависимости между ними, параллельную инициализацию, socket activation, работу с cgroups, журналирование и ряд других задач. Для администратора основными инструментами взаимодействия являются systemctl и journalctl.

Главное отличие systemd от традиционного подхода заключается в том, что система описывается через units и зависимости между ними. Это позволяет управлять службами, сокетами, точками монтирования, таймерами и другими ресурсами через единую модель.

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

FAQ

Что такое systemd простыми словами?

Systemd — это система управления Linux, которая запускается как первый процесс PID 1 и отвечает за запуск, остановку и контроль системных служб и других компонентов.

Что такое systemctl?

systemctl — основной инструмент командной строки для управления units systemd. С его помощью можно запускать, останавливать, перезапускать и просматривать состояние служб.

Что такое unit в systemd?

Unit — это объект управления systemd. В зависимости от типа он может описывать службу, сокет, таймер, точку монтирования, target, устройство и другие ресурсы.

Что такое service в systemd?

Service unit описывает процесс или группу процессов, которыми управляет systemd. Обычно такие units имеют расширение .service.

Как посмотреть состояние службы?

Для этого используется команда systemctl status имя-службы, например systemctl status nginx.

Как посмотреть ошибки службы?

Обычно для этого используется journalctl -u имя-службы. Команда показывает записи журнала, связанные с указанным unit.

Что такое journalctl?

journalctl — программа для просмотра журнала, который собирает systemd-journald. Она позволяет фильтровать сообщения по службе, загрузке системы, времени и другим параметрам.

Можно ли отключить systemd?

Systemd является init-системой только в тех Linux-дистрибутивах, где он используется в качестве PID 1. Теоретически существуют альтернативные init-системы, однако их установка и переход на них зависят от конкретного дистрибутива и требуют отдельной настройки.

Чем systemd отличается от SysVinit?

Systemd использует units, зависимости, параллельный запуск и ряд других механизмов, тогда как SysVinit традиционно основывается на init-процессе и скриптах запуска. Systemd также поддерживает совместимость с SysV и LSB init-скриптами.

Где находятся файлы служб systemd?

Они могут находиться в нескольких каталогах. Для системных пользовательских настроек обычно используется /etc/systemd/system/, а units, предоставляемые пакетами, часто размещаются в /usr/lib/systemd/system/.

Можно ли создать собственную службу systemd?

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

Дополнительная информация:

  • Официальный сайт systemd: https://systemd.io/
  • Официальная документация systemd: https://systemd.io/README
  • Архитектура systemd: https://systemd.io/ARCHITECTURE/
  • Исходный код systemd на GitHub: https://github.com/systemd/systemd
  • Документация systemd.service: https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html
  • Документация systemctl: https://www.freedesktop.org/software/systemd/man/latest/systemctl.html
  • Документация systemd.unit: https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html
Linux с нуля отказывается от System V Init, решение вызывает сожаление

Linux с нуля отказывается от System V Init, решение вызывает сожаление

Linux From Scratch — проект и книга, в которых рассказывается, как шаг за шагом собрать полноценную систему Linux из исходного кода. Авторы объявили, что в будущих выпусках больше не будет поддержки или разработки System V init, что знаменует собой неохотный, но решительный переход на использование только systemd.Об этом решении сообщил давний участник LFS Брюс Даббс в
Создатель Systemd Леннарт Поттеринг присоединяется к новому проекту Linux Integrity Startup

Создатель Systemd Леннарт Поттеринг присоединяется к новому проекту Linux Integrity Startup

В Берлине появился новый стартап под названием Amutable, и его три основателя представляют собой особенно интересную команду, поскольку все они в последние годы работали в Microsoft. Компанию возглавляет генеральный директор Крис Кюль, который ранее работал в Microsoft, но затем ушёл оттуда и теперь полностью сосредоточен на Amutable.Второе название не нуждается в представлении. Техническое направление Amutable определяет главный
Менеджер входа в систему KDE Plasma не будет поддерживать системы Linux или BSD без Systemd

Менеджер входа в систему KDE Plasma не будет поддерживать системы Linux или BSD без Systemd

Новый менеджер входа в систему Plasma от KDE впервые официально появится в Plasma 6.6 (выход запланирован на 17 февраля). Он разработан как преемник старого SDDM, который уже много лет используется в KDE Plasma.Разработчики KDE позиционируют его как глубоко интегрированный в сам стек Plasma компонент, призванный модернизировать процесс входа в систему, приблизив его к тому, как на самом
Выпущена версия Systemd 259 с серьёзными изменениями в преддверии отказа от устаревшей SysV

Выпущена версия Systemd 259 с серьёзными изменениями в преддверии отказа от устаревшей SysV

Вышла версия Systemd v259, которая представляет собой одно из самых масштабных обновлений за последние циклы и готовит пользователей и дистрибутивы к более радикальным изменениям, запланированным на версию v260.Поддержка устаревших сценариев инициализации System V официально признана устаревшей и будет полностью удалена в systemd версии 260. Такие компоненты, как systemd-sysv-generator и systemd-sysv-install, теперь работают в режиме «на
Systemd 259 RC1: предварительное удаление скриптов SysV

Systemd 259 RC1: предварительное удаление скриптов SysV

Systemd 259 уже не за горами, и недавно выпущенная RC1-версия даёт нам чёткое представление о том, чего ожидать от финальной версии этой наиболее широко используемой в Linux системы инициализации и менеджера служб.Одним из наиболее значимых шагов является окончательное прекращение поддержки сценариев инициализации System V. Генераторы SysV, генератор rc-local и вспомогательные средства sysv-install будут удалены в
Systemd представляет экспериментальную поддержку musl

Systemd представляет экспериментальную поддержку musl

Systemd объединил экспериментальную поддержку musl libc (https://musl.libc.org/), реализации стандартной библиотеки C, построенной на основе API системных вызовов Linux, что знаменует собой заметный сдвиг в области совместимости в среде Linux. Если вам интересно, почему это так важно, позвольте мне объяснить.В течение многих лет systemd и musl существовали отдельно друг от друга: для systemd требовалась glibc, а дистрибутивы
TC Debian отменяет правила, установленные разработчиками systemd для разрешений /var/lock.avif

TC Debian отменяет правила, установленные разработчиками systemd для разрешений /var/lock.avif

Технический комитет Debian (https://www.debian.org/devel/tech-ctte), высший орган, принимающий технические решения в Debian, который вмешивается, когда разработчики Debian не могут прийти к согласию по какому-либо техническому вопросу, вмешался в спор между разработчиками Debian и сопровождающими systemd по поводу каталога /var/lock.Споры разгорелись после того, как недавнее обновление systemd (версия 258) сделало /var/lock доступным для записи только пользователю root, что нарушило совместимость
В Artix Linux отказались от поддержки рабочего стола GNOME из-за зависимости от Systemd

В Artix Linux отказались от поддержки рабочего стола GNOME из-за зависимости от Systemd

Разработчики Artix Linux объявляют о прекращении поддержки рабочего стола GNOME, ссылаясь на зависимость от systemd как на ключевую проблему. Команда Artix Linux (https://artixlinux.org/) объявила об официальном прекращении поддержки сред рабочего стола на базе GNOME, сославшись на изменения в основной ветке, из-за которых их невозможно запустить без systemd.Для тех, кто не в курсе, Artix — это дистрибутив на базе Arch
systemd 258 удаляет cgroup v1 и загружает минимальное ядро до Linux 5.4

systemd 258 удаляет cgroup v1 и загружает минимальное ядро до Linux 5.4

systemd 258 — это новая версия самого распространенного диспетчера систем и служб Linux, релиз, который, как обычно, полон новинок, хотя из-за высокотехнологичного характера этого компонента мы едва ли можем выделить его крупным мазком.Таким образом, изюминкой systemd 258 является полное прекращение поддержки cgroup v1. Так называемый «устаревший» или «гибридный» режим исчезает, так что отныне cgroup v2 будет монтироваться
Systemd 258 удаляет cgroup v1, повышает базовую версию ядра до 5.4

Systemd 258 удаляет cgroup v1, повышает базовую версию ядра до 5.4

В Systemd 258 удалена cgroup v1, установлена базовая версия ядра 5.4, ужесточены права доступа к TTY и OpenSSL стал единственным бэкендом TLS. Эти изменения направлены на повышение безопасности. Systemd, широко распространённый менеджер систем и сервисов для Linux, выпустил свою последнюю версию 258, в которой внесены существенные изменения, о которых следует знать администраторам.Вероятно, самым заметным изменением стало
Прокрутить страницу до начала