Red Hat System Administration I 8.2

Управление системными службами

Задачи

После завершения этого раздела вы сможете управлять системными демонами и сетевыми службами с помощью systemctl.

Запуск и остановка служб

Есть много причин, почему может потребоваться вручную остановить или запустить службу. Среди них ― обновление службы, изменение файла конфигурации и удаление службы. Кроме того, администратор может вручную запустить редко используемую службу.

Чтобы запустить службу, сначала выполните команду systemctl status и убедитесь, что служба еще не запущена. Затем выполните команду systemctl start от имени пользователя root (при необходимости используйте sudo). Ниже приведен пример запуска службы sshd.service.

[root@host ~]# systemctl start sshd.service

Если с именем службы не указан тип службы, служба systemd ищет файлы .service для управления службой в командах. Таким образом, вышеуказанная команда может быть выполнена следующим образом.

[root@host ~]# systemctl start sshd

Чтобы остановить работающую службу, используйте аргумент stop с командой systemctl. Ниже приведен пример остановки службы sshd.service.

[root@host ~]# systemctl stop sshd.service

Перезапуск и перезагрузка служб

Во время перезапуска работающей службы она останавливается, а затем запускается. При этом идентификатор процесса изменяется, и при запуске служба получает новый идентификатор процесса. Чтобы перезапустить работающую службу, используйте аргумент restart с командой systemctl. Ниже приведен пример перезапуска службы sshd.service.

[root@host ~]# systemctl restart sshd.service

Некоторые службы могут перезагружать собственные файлы конфигурации без перезапуска. Этот процесс называется перезагрузкой службы. Перезагрузка службы не изменяет идентификатор процесса, связанный с различными процессами службы. Чтобы перезагрузить работающую службу, используйте аргумент reload с командой systemctl. Ниже приведен пример перезагрузки службы sshd.service после изменения конфигурации.

[root@host ~]# systemctl reload sshd.service

Если вы не уверены в том, что служба поддерживает функцию перезагрузки файла конфигурации, используйте аргумент reload-or-restart с командой systemctl. Команда перезагрузит изменения конфигурации, если функция перезагрузки доступна. В противном случае команда перезапустит службу, чтобы применить изменения конфигурации.

[root@host ~]# systemctl reload-or-restart sshd.service

Отображение списка зависимостей юнитов

Некоторые службы требуют, чтобы сначала запускались другие службы, создавая зависимости от других служб. Другие службы могут не запускаться во время начальной загрузки, а запускаться только по требованию. В обоих случаях systemd и systemctl запускают службы по мере необходимости для разрешения зависимостей и запуска редко используемых служб. Например, если служба печати CUPS не запущена и в каталог очереди печати помещен файл, система запустит демоны или команды, относящиеся к службе CUPS, чтобы выполнить запрос на печать.

[root@host ~]# systemctl stop cups.service
Warning: Stopping cups, but it can still be activated by:
  cups.path
  cups.socket

Чтобы полностью остановить службы печати в системе, необходимо остановить все три юнита. Отключение службы приводит к отключению ее зависимостей.

Команда systemctl list-dependencies UNIT отображает иерархическое сопоставление зависимостей для запуска юнита службы. Для отображения обратных зависимостей (юнитов, зависящих от указанного юнита) используйте с командой опцию --reverse.

[root@host ~]# systemctl list-dependencies sshd.service
sshd.service
● ├─system.slice
● ├─sshd-keygen.target
● │ ├─sshd-keygen@ecdsa.service
● │ ├─sshd-keygen@ed25519.service
● │ └─sshd-keygen@rsa.service
● └─sysinit.target
...output omitted...

Маскировка и демаскировка служб

Иногда в системе могут оказываться конфликтующие службы. Например, существует несколько способов управления почтовыми серверами (среди них ― postfix и sendmail). Маскировка службы предотвращает случайный запуск администратором службы, конфликтующей с другими службами. Маскировка создает в каталогах конфигурации ссылку на файл /dev/null, предотвращающий запуск службы.

[root@host ~]# systemctl mask sendmail.service
Created symlink /etc/systemd/system/sendmail.service → /dev/null.
[root@host ~]# systemctl list-unit-files --type=service
UNIT FILE                                   STATE
...output omitted...
sendmail.service                            masked
...output omitted...

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

[root@host ~]# systemctl start sendmail.service
Failed to start sendmail.service: Unit sendmail.service is masked.

Используйте команду systemctl unmask для демаскировки юнита службы.

[root@host ~]# systemctl unmask sendmail
Removed /etc/systemd/system/sendmail.service.

Важно

Отключенная служба может быть запущена вручную или другими юнитами, но она не запускается автоматически во время начальной загрузки. Замаскированная служба не может быть запущена ни вручную, ни автоматически.

Включение возможности запуска и остановки служб во время начальной загрузки

Запуск службы в работающей системе не гарантирует, что эта служба будет автоматически запущена после перезагрузки системы. Аналогичным образом остановка службы в работающей системе не предотвращает ее запуска после перезагрузки системы. Чтобы служба могла запускаться во время начальной загрузки, необходимо создать соответствующие ссылки в каталогах конфигурации systemd. Эти ссылки создаются и удаляются командой systemctl.

Чтобы служба могла запускаться во время начальной загрузки, используйте команду systemctl enable.

[root@root ~]# systemctl enable sshd.service
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.

Приведенная выше команда создает символьную ссылку из файла юнита службы (обычно в каталоге /usr/lib/systemd/system) на то место на диске, где команда systemd ищет файлы (в каталоге /etc/systemd/system/TARGETNAME.target.wants). Включение службы не запускает службу в текущем сеансе. Чтобы запустить службу и включить ее автоматический запуск во время начальной загрузки, выполните команды systemctl start и systemctl enable.

Чтобы отключить автоматический запуск службы, используйте следующую команду. Она удаляет символьную ссылку, созданную при включении службы. Обратите внимание, что отключение службы не приводит к ее остановке.

[root@host ~]# systemctl disable sshd.service
Removed /etc/systemd/system/multi-user.target.wants/sshd.service.

Чтобы проверить, включена или отключена служба, используйте команду systemctl is-enabled.

Сводка по командам systemctl

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

Таблица 9.3. Полезные команды управления службами

ЗадачаКоманда
Просмотр подробной информации о состоянии юнита.systemctl status UNIT
Остановка службы в работающей системе.systemctl stop UNIT
Запуск службы в работающей системе.systemctl start UNIT
Перезапуск службы в работающей системе.systemctl restart UNIT
Перезагрузка файла конфигурации работающей службы.systemctl reload UNIT
Полное отключение запуска службы (как вручную, так и во время начальной загрузки).systemctl mask UNIT
Включение доступа к замаскированной службе.systemctl unmask UNIT
Настройка службы на запуск во время начальной загрузки.systemctl enable UNIT
Отключение запуска службы во время начальной загрузки.systemctl disable UNIT
Отображение списка юнитов, необходимых для указанного юнита.systemctl list-dependencies UNIT

Ссылки

Man-страницы systemd(1), systemd.unit(5), systemd.service(5), systemd.socket(5) и systemctl(1)

Дополнительные сведения см. в главе Managing system services руководства Red Hat Enterprise Linux 8 Configuring basic system settings: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_basic_system_settings/managing-services-with-systemd_configuring-basic-system-settings#managing-system-services_managing-services-with-systemd