Systemd — это менеджер системы и служб Linux. Он инициализирует другие демоны в системе при загрузке. Основная цель systemd — полный контроль над запуском и выполнением процессов, описанных в его конфигурации. Какая у менеджера архитектура и как его применять — узнаете из этой обзорной статьи.
- Systemd как PID 1 осуществляет запуск стольких служб в параллельном режиме, сколько ему нужно. Благодаря этому загрузка ускоряется.
- Systemd создает журналы для хранения системных логов и дает инструменты для управления записями.
- Systemctl дает пользовательский интерфейс для управления службами.
- Обеспечивается обратная совместимость благодаря поддержке SystemV и LSB.
- Управление службами и логи дают информацию о состоянии служб.
-
- Можно управлять сокетами.
- Таймеры предоставляют расширенные возможности для планирования, включая запуск скриптов по времени от старта системы.
- Можно монтировать и размонтировать файловые системы с иерархическим уведомлением для безопасного каскадирования.
- Можно создавать временные файлы и управлять ими, в том числе удалять.
-
- Можно запускать скрипты при подключении или отключении устройств.
- Можно через анализ последовательности загрузки найти службы, запуск которых отнимает больше всего ресурсов или вызывает сбои.
Юнит — это описание сервиса в текстовом виде. В нем указаны операции, которые выполняются до и после запуска службы. По сути, это описание параметров инициализации.
Юниты бывают разных типов. Например, юнит службы имеет тип *.service. Все виды:
Тип | Что делает |
.service | Описывает, как управлять службой или приложением на сервере. |
.socket | Описывает сетевой, IPC-сокет или FIFO-буфер, который используется для активации сокета. |
.device | Описывает устройство, указанное как необходимое для управления systemd с помощью udev или файловой системы sysfs. |
.mount | Определяет точку монтирования в системе, которой управляет systemd. |
.automount | Настраивает точку монтирования, которая будет автоматически установлена. |
.swap | Описывает пространство подкачки в системе (swap-файл). |
.target | Обеспечивает точки синхронизации для других устройств при загрузке или изменении состояний. |
.path | Определяет путь, который может использоваться для активации на основе пути. |
.timer | Определяет таймер, который управляется systemd для задержки или активации по плану. |
.snapshot | Позволяет восстановить текущее состояние системы после изменений. |
.slice | Связан с узлами группы управления Linux, что позволяет ограничить ресурсы или назначить их для любых процессов, связанных с slice. |
.scope | Создается автоматически systemd из информации, которую получил от интерфейса шины. |
Создание юнитов
Вы также можете создавать свои юниты. Например, вы написали приложение на Python и хотите добавить его в виде сервиса, которым будете управлять через systemd. В качестве примера создайте юнит item.service:
mcedit /etc/systemd/system/test.service
В описании юнита добавьте обязательные секции:
[Unit]
Description=test service
[Service]
Type=oneshot ExecStart=/bin/echo "Hello World!" RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Теперь нужно применить изменения в конфигурации:
systemctl daemon-reload
Следующий шаг — запуск юнита:
systemctl start test.service
Напоследок проверьте его статус:
systemctl status test.service
Основные команды systemd
У systemd есть несколько основных команд, которые быстро запоминаются при постоянном использовании менеджера.
- systemctl start name.service — запустить сервис.
- systemctl stop name.service — остановить сервис.
- systemctl restart name.service — перезапустить сервис.
- systemctl status name.service — узнать статус сервиса.
- systemctl enable name.service — добавить сервис в автозагрузку.
- systemctl disable name.service — удалить сервис из автозагрузки.
- systemctl is-enabled name.service — проверить, находится ли сервис в списке автозагрузки.
- systemctl mask name.service — запретить запуск сервиса.
- systemctl umask name.service — разрешить запуск сервиса.
- systemctl --state=failed — показать службы, которые не запустились.
- systemctl help name.service — показать страницу руководства сервиса.
- systemctl daemon-reload — применить конфигурацию после изменения в описании сервиса.
С помощью systemctl также можно увидеть зависимости модуля. Например:
systemctllist-dependencies sshd.service
посмотреть свойства любого юнита. Используйте команду:
systemctl show sshd.service