После завершения этого раздела вы сможете управлять системными демонами и сетевыми службами с помощью systemctl.
Есть много причин, почему может потребоваться вручную остановить или запустить службу. Среди них ― обновление службы, изменение файла конфигурации и удаление службы. Кроме того, администратор может вручную запустить редко используемую службу.
Чтобы запустить службу, сначала выполните команду systemctl status и убедитесь, что служба еще не запущена. Затем выполните команду systemctl start от имени пользователя root (при необходимости используйте sudo). Ниже приведен пример запуска службы sshd.service.
root
sshd.service
[root@host ~]# systemctl start sshd.service
[root@host ~]#
systemctl start sshd.service
Если с именем службы не указан тип службы, служба systemd ищет файлы .service для управления службой в командах. Таким образом, вышеуказанная команда может быть выполнена следующим образом.
systemd
.service
[root@host ~]# systemctl start sshd
systemctl start sshd
Чтобы остановить работающую службу, используйте аргумент stop с командой systemctl. Ниже приведен пример остановки службы sshd.service.
stop
[root@host ~]# systemctl stop sshd.service
systemctl stop sshd.service
Во время перезапуска работающей службы она останавливается, а затем запускается. При этом идентификатор процесса изменяется, и при запуске служба получает новый идентификатор процесса. Чтобы перезапустить работающую службу, используйте аргумент restart с командой systemctl. Ниже приведен пример перезапуска службы sshd.service.
restart
[root@host ~]# systemctl restart sshd.service
systemctl restart sshd.service
Некоторые службы могут перезагружать собственные файлы конфигурации без перезапуска. Этот процесс называется перезагрузкой службы. Перезагрузка службы не изменяет идентификатор процесса, связанный с различными процессами службы. Чтобы перезагрузить работающую службу, используйте аргумент reload с командой systemctl. Ниже приведен пример перезагрузки службы sshd.service после изменения конфигурации.
reload
[root@host ~]# systemctl reload sshd.service
systemctl reload sshd.service
Если вы не уверены в том, что служба поддерживает функцию перезагрузки файла конфигурации, используйте аргумент reload-or-restart с командой systemctl. Команда перезагрузит изменения конфигурации, если функция перезагрузки доступна. В противном случае команда перезапустит службу, чтобы применить изменения конфигурации.
reload-or-restart
[root@host ~]# systemctl reload-or-restart sshd.service
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 stop cups.service
Чтобы полностью остановить службы печати в системе, необходимо остановить все три юнита. Отключение службы приводит к отключению ее зависимостей.
Команда systemctl list-dependencies UNIT отображает иерархическое сопоставление зависимостей для запуска юнита службы. Для отображения обратных зависимостей (юнитов, зависящих от указанного юнита) используйте с командой опцию --reverse.
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...
systemctl list-dependencies sshd.service
Иногда в системе могут оказываться конфликтующие службы. Например, существует несколько способов управления почтовыми серверами (среди них ― postfix и sendmail). Маскировка службы предотвращает случайный запуск администратором службы, конфликтующей с другими службами. Маскировка создает в каталогах конфигурации ссылку на файл /dev/null, предотвращающий запуск службы.
postfix
sendmail
/dev/null
[root@host ~]# systemctl mask sendmail.service Created symlink /etc/systemd/system/sendmail.service → /dev/null.
systemctl mask sendmail.service
[root@host ~]# systemctl list-unit-files --type=service UNIT FILE STATE ...output omitted... sendmail.service masked ...output omitted...
systemctl list-unit-files --type=service
Попытка запустить замаскированный юнит службы завершится неудачей, и вы получите следующий вывод.
[root@host ~]# systemctl start sendmail.service Failed to start sendmail.service: Unit sendmail.service is masked.
systemctl start sendmail.service
Используйте команду systemctl unmask для демаскировки юнита службы.
[root@host ~]# systemctl unmask sendmail Removed /etc/systemd/system/sendmail.service.
systemctl unmask sendmail
Отключенная служба может быть запущена вручную или другими юнитами, но она не запускается автоматически во время начальной загрузки. Замаскированная служба не может быть запущена ни вручную, ни автоматически.
Запуск службы в работающей системе не гарантирует, что эта служба будет автоматически запущена после перезагрузки системы. Аналогичным образом остановка службы в работающей системе не предотвращает ее запуска после перезагрузки системы. Чтобы служба могла запускаться во время начальной загрузки, необходимо создать соответствующие ссылки в каталогах конфигурации 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.
[root@root ~]#
systemctl enable sshd.service
Приведенная выше команда создает символьную ссылку из файла юнита службы (обычно в каталоге /usr/lib/systemd/system) на то место на диске, где команда systemd ищет файлы (в каталоге /etc/systemd/system/TARGETNAME.target.wants). Включение службы не запускает службу в текущем сеансе. Чтобы запустить службу и включить ее автоматический запуск во время начальной загрузки, выполните команды systemctl start и systemctl enable.
/usr/lib/systemd/system
/etc/systemd/system/TARGETNAME.target.wants
TARGETNAME
Чтобы отключить автоматический запуск службы, используйте следующую команду. Она удаляет символьную ссылку, созданную при включении службы. Обратите внимание, что отключение службы не приводит к ее остановке.
[root@host ~]# systemctl disable sshd.service Removed /etc/systemd/system/multi-user.target.wants/sshd.service.
systemctl disable sshd.service
Чтобы проверить, включена или отключена служба, используйте команду systemctl is-enabled.
Можно запускать и останавливать службы в работающей системе, а также включать и отключать их автоматический запуск во время начальной загрузки.
Таблица 9.3. Полезные команды управления службами
Man-страницы systemd(1), systemd.unit(5), systemd.service(5), systemd.socket(5) и systemctl(1)
systemd.unit
systemd.service
systemd.socket
systemctl
Дополнительные сведения см. в главе 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