Примеры управления службами в Linux с помощью systemctl

Все основные дистрибутивы 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 для удобства просмотра.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.debugpoint.com

Похожие статьи

Комментарии (0)