Systemd — это менеджер системы и служб Linux. Он инициализирует другие демоны в системе при загрузке. Основная цель systemd — полный контроль над запуском и выполнением процессов, описанных в его конфигурации. Какая у менеджера архитектура и как его применять — узнаете из этой обзорной статьи.
[upl-image-preview url=https://onhub.ru/assets/files/2023-11-12/1699748552-169963-image.png]
- 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