Как управлять сервисами Systemd с помощью Systemctl?

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

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

Ключевое преимущество по сравнению с SysV заключается в том, что systemd запускает как можно больше сервисов параллельно, что ускоряет процесс запуска и ускоряет отображение экрана входа в систему.

Units (Юниты)

Элементы, которыми управляет systemd, называются units (юнитами). Файлы модуля находятся в /lib/systemd/system.

Service Units (Сервисные юниты)

Для сервисного управления применяются сервисные юнити, которые имеют файлы юнитов с суффиксом .service.

Управление сервисами systemd

Команда для управления юнитами systemd является systemctl.

Запуск и остановка сервисов

Чтобы запустить службу systemd, используйте команду запуска systemctl:

sudo systemctl start name.service

Вы также можете оставить суффикс .service.

Например, чтобы запустить сервер Apache в Ubuntu:

sudo systemctl start apache2

Чтобы остановить работающий сервис:

sudo systemctl stop name.service

Итак, чтобы остановить сервер apache в Ubuntu:

sudo systemctl stop apache2

Услуги перезапуска и перезагрузки

Чтобы перезапустить работающую службу, используйте команду restart:

sudo systemctl restart name.service

И где требуется только перезагрузка файла конфигурации:

sudo systemctl reload name.service

Включение и отключение сервисов

Если вы хотите, чтобы служба автоматически запускалась при загрузке системы, используйте команду enable:

sudo systemctl enable name.service

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

sudo systemctl disable name.service

Параметр disable не останавливает работающий сервис.

Просмотр статуса сервиса

Чтобы просмотреть информацию о сервисе:

sudo systemctl status name.service

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

sudo systemctl status apache2

Будет:

apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Tue 2020-05-19 22:11:36 UTC; 4 days ago
  Process: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 104165 (apache2)
    Tasks: 55 (limit: 1024)
   CGroup: /system.slice/apache2.service
           ├─104165 /usr/sbin/apache2 -k start
           ├─116006 /usr/sbin/apache2 -k start
           └─116007 /usr/sbin/apache2 -k start

May 19 22:11:36 ubuntu18 systemd[1]: Starting The Apache HTTP Server...
May 19 22:11:36 ubuntu18 systemd[1]: Started The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloaded The Apache HTTP Server.
May 22 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.

Чтобы проверить, активен ли сервис:

sudo systemctl is-active name.service

Таким образом, пока запущена служба apache2, вывод команды systemctl is-active:

sudo systemctl is-active apache2
active

Чтобы проверить, включен ли сервис:

sudo systemctl is-enabled name.service

Просмотр состояния системы

Все команды, которые вы видели до сих пор, используются для управления одним сервисом. Если вы хотите получить обзор состояния системы, используйте следующий набор команд:

Чтобы увидеть все типы юнитов:

sudo systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
swap
timer
path
slice
scope

Чтобы вывести список всех установленных модулей, используйте list-unit-files

sudo systemctl list-unit-files
UNIT FILE                              STATE
proc-sys-fs-binfmt_misc.automount      static
-.mount                                generated
boot-efi.mount                         generated
dev-hugepages.mount                    static
dev-mqueue.mount                       static
mnt.mount                              generated
proc-sys-fs-binfmt_misc.mount          static
sys-fs-fuse-connections.mount          static
sys-kernel-config.mount                static
sys-kernel-debug.mount                 static
acpid.path                             enabled
apport-autoreport.path                 enabled
systemd-ask-password-console.path      static
systemd-ask-password-plymouth.path     static
systemd-ask-password-wall.path         static
session-161.scope                      transient
accounts-daemon.service                enabled

Вывод имеет только два столбца Unit File и State. Состояние обычно будет таким: enabled, disabled, static или masked.

  • Static (cтатический): это означает, что модуль не может быть включен, выполняет одноразовое действие или является зависимостью другого модуля и не может быть запущен сам по себе.
  • Masked (маскированный): юнит, указанный как замаскированный, означает, что он запускается не полностью, так как связан с директорией /dev/null. Это называется маскировкой устройства. Он предотвращает запуск службы вручную или автоматически.

Список всех установленных сервисов

Команда systemctl list-unit-files с параметром -t или -type показывает только состояние установленных служб.

sudo systemctl list-unit-files -t service
UNIT FILE                              STATE
accounts-daemon.service                enabled
acpid.service                          disabled
apache-htcacheclean.service            disabled
apache-htcacheclean@.service           disabled
apache2.service                        enabled
apache2@.service                       disabled
apparmor.service                       enabled
apport-autoreport.service              static
apport-forward@.service                static
apport.service                         generated
apt-daily-upgrade.service              static
apt-daily.service                      static
atd.service                            enabled
autovt@.service                        enabled
blk-availability.service               enabled
bootlogd.service                       masked
bootlogs.service                       masked

Чтобы увидеть все активные сервисные юниты, используйте list-unit с параметром -t

sudo systemctl list-units -t service
UNIT                                 LOAD   ACTIVE SUB     DESCRIPTION
  accounts-daemon.service              loaded active running Accounts Service
  apache2.service                      loaded active running The Apache HTTP Server
  apparmor.service                     loaded active exited  AppArmor initialization
  apport.service                       loaded active exited  LSB: automatic crash report generation
  atd.service                          loaded active running Deferred execution scheduler
  blk-availability.service             loaded active exited  Availability of block devices
  cloud-config.service                 loaded active exited  Apply the settings specified in cloud-con
  cloud-final.service                  loaded active exited  Execute cloud user/final scripts
  cloud-init-local.service             loaded active exited  Initial cloud-init job (pre-networking)
  cloud-init.service                   loaded active exited  Initial cloud-init job (metadata service
  console-setup.service                loaded active exited  Set console font and keymap
  cron.service                         loaded active running Regular background program processing dae

Вывод имеет следующие столбцы:

  • UNIT: имя единицы обслуживания systemd
  • LOAD: показывает, правильно ли было прочитано и загружено определение объекта.
  • ACTIVE: описывает, если устройство активно.
  • SUB: Низкоуровневое состояние активации устройства, дающее более подробную информацию об устройстве. Это зависит от типа устройства.
  • DESCRIPTION: описание сервисного подразделения.

Также рекомендуем прочитать:

  1. Что такое файловая система Linux? Простое Руководство
  2. 11 команд на Linux для работы в качестве системного администратора
  3. Действительно ли Linux невосприимчив к вирусам и вредоносным программам?
  4. Программы для linux. 30 стандартные установленные программы на Linux