Все основные дистрибутивы Linux, такие как Ubuntu, Fedora и т.д., сегодня используют систему systemd init для управления и контроля различных сервисов во время работы системы. Для управления сервисами(демонами) systemd правильнее использовать утилиту systemctl.
Концепция управления сервисами
Systemd – это система init и менеджер сервисов современных Linux-систем. Система init – это первый процесс, который запускается при включении системы и продолжает работать до ее выключения.
Основная цель systemd как системы init – инициализация различных компонентов системы сразу после загрузки ядра Linux. Кроме того, когда система запущена, она также управляет различными службами и демонами, такими как демон ssh, сетевой менеджер и т.д.
Systemd работает на основе файлов блоков. Существуют различные типы юнит-файлов в зависимости от их назначения и ресурсов. Например, службы имеют файлы с расширениями .service
, а файлы устройств имеют расширения .device
. Для управления файлами блоков используется команда systemctl.
Важные файлы единиц и их описание
Название | Расширение | Описание |
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 | Устройство подкачки или файл подкачки. |
Timer unit | .timer | Таймер systemd. |
Где хранятся файлы блоков?
В идеальном случае в системе Linux файлы блоков хранятся в двух местах. Файлы, созданные во время выполнения и загрузки, хранятся в /run/systemd/system/
. Файлы блоков, которые вы создаете вручную (например, командой systemctl enable
), хранятся в /etc/systemd/system/
.
Путь к /etc/systemd/system/
имеет приоритет над файлами блоков времени выполнения, находящимися в /run/systemd/system/
.
Есть еще один путь, где systemd хранит системную копию файлов служебных блоков – /lib/systemd/system
.
Примеры
Управление службами Systemd с помощью systemctl
Сначала рассмотрим, как можно получить список служб, проверить их состояние и т.д. Это необходимо, если вы хотите понять состояние вашей системы в целях исследования.
Чтобы получить список всех активных модулей systemd, вы можете использовать следующую команду.
systemctl list-units
Эта команда дает большой вывод с нижеприведенными заголовками. Прокрутите с помощью клавиш со стрелками (вверх, вниз, влево и вправо), чтобы просмотреть весь вывод.
- UNIT – Имя подразделения systemd
- Load – Отражает, разобрал ли systemd конфигурационный файл устройства и загружен ли он в память
- ACTIVE – Состояние устройства (высокоуровневый статус).
- SUB – Состояние устройства (низкоуровневый статус)
- DESCRIPTION – Описание устройства.
Например, значение ACTIVE может быть активным, а уровень SUB может быть различным, например, запущен, прослушивается, мертв и активен.
Другие примеры команд:
systemctl list-units --all
systemctl list-units --all --state=inactive
Список служб
Чтобы перечислить все устройства типа service, используйте следующую команду.
systemctl list-units --type=service
Вы можете комбинировать дополнительные параметры. Например, если вы хотите узнать запущенные службы, используйте следующую команду.
systemctl list-units --type=service --state=running
Другие комбинации значений state
, которые вы можете использовать:
- active
- inactive
- running
- dead
- exited
- plugged
- tentative
- listening
- waiting
Дополнительно, вы можете перечислить все файлы единиц с помощью следующих команд.
systemctl list-unit-files
Управление файлами устройств – это отдельная тема.
Показать статус службы
Чтобы узнать статус службы, используйте below command. For this guide,
Я использовал службу NetworkManager
, которая управляет сетевым управлением системы. Вы можете заменить NetworkManager на собственное имя службы. Все следующие команды требуют привилегии sudo. Если вы не знаете имя службы, выполните приведенные выше команды для отображения всех служб, а затем отфильтруйте их с помощью команды grep
.
systemctl status NetworkManager.service
Обратите внимание, что вы можете опустить .service в конце имени службы. Systemd достаточно умна, чтобы понять команду!
В приведенном выше примере видно, что вся информация представлена в команде. В ней также есть значение CGroup для идентификации групп пользователей, что необходимо в серверной среде.
Еще несколько примеров команд:
systemctl is-active NetworkManager.service
systemctl is-enabled NetworkManager.service
systemctl is-failed NetworkManager.service
Запуск службы
Запустить службу systemd очень просто. Выполните приведенную ниже команду, указав start и имя службы. Команда запустит службу.
sudo systemctl start NetworkManager.service
Остановка службы
Используя параметр stop, вы можете остановить службу. Например:
sudo systemctl stop NetworkManager.service
Будьте осторожны при остановке службы. Убедитесь, что вы знаете, что делаете.
Перезапуск и перезагрузка службы
Systemd предоставляет параметры для настройки службы таким образом, чтобы она могла перезапускаться или перезагружаться без перезапуска. Параметр restart перезапускает службы, а reload перечитывает конфигурационные файлы
sudo systemctl restart NetworkManager.service
sudo systemctl reload NetworkManager.service
Включение и отключение службы
Если вы создали новую службу или установили приложения, работающие через службы, запуск их с помощью команды start не включит их снова при следующей загрузке. Поэтому, если вы хотите, чтобы systemd запускала службу при загрузке системы, вам нужно использовать команду enable. То же самое верно и для отключения, когда вы хотите отключить службу во время загрузки.
sudo systemctl enable NetworkManager.service
Команда enable создает симлинк из /etc/systemd/system в целевые места.
Чтобы отключить службу, используйте следующую команду.
sudo systemctl disable NetworkManager.service
Службы systemd и связанные с ними команды также имеют множество дополнительных опций. Systemd является надежным и важным компонентом современных систем Linux. Надеюсь, это руководство поможет вам при необходимости устранить неполадки на вашем рабочем столе или серверах в Linux. Существует множество дополнительных возможностей, которые предоставляет systemd – таких как целевые файлы, изменение файлов блоков обслуживания и др. – о которых я расскажу в следующих статьях. Все статьи помечены тегом systemd для удобства просмотра.
Комментарии (0)