systemd — это новый способ запуска сервисов в Linux. systemd имеет превосходный sysvinit . systemd ускоряет загрузку Linux и теперь является стандартным способом управления службами Linux. Несмотря на стабильность, systemd все еще развивается.
systemd как система инициализации, используется для управления как службами, так и демонами, которым необходимо изменить состояние после загрузки ядра Linux. При изменении состояния применяется запуск, остановка, перезагрузка и настройка состояния сервиса.
Сначала давайте проверим версию systemd, которая в данный момент работает на нашем сервере.
[centos@localhost ~]$ systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN [centos@localhost ~]$
Начиная с версии 7 CentOS, полностью обновленной на момент написания этой статьи systemd версия 219 является текущей стабильной версией.
Мы также можем проанализировать время последней загрузки сервера с помощью systemd-analysis
[centos@localhost ~]$ systemd-analyze Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s [centos@localhost ~]$
Когда время загрузки системы медленнее, мы можем использовать команду systemd-analysis blame .
[centos@localhost ~]$ systemd-analyze blame 40.882s kdump.service 5.775s NetworkManager-wait-online.service 4.701s plymouth-quit-wait.service 3.586s postfix.service 3.121s systemd-udev-settle.service 2.649s tuned.service 1.848s libvirtd.service 1.437s network.service 875ms packagekit.service 855ms gdm.service 514ms firewalld.service 438ms rsyslog.service 436ms udisks2.service 398ms sshd.service 360ms boot.mount 336ms polkit.service 321ms accounts-daemon.service
При работе с systemd важно понимать концепцию модулей . Единицы — это ресурсы, которые systemd знает, как интерпретировать. Единицы подразделяются на 12 типов следующим образом:
- .оказание услуг
- .разъем
- .device
- .mount
- .automount
- .своп
- .TARGET
- .дорожка
- .timer
- .snapshot
- .ломтик
- .объем
По большей части мы будем работать с .service в качестве целевых объектов. Рекомендуется провести дальнейшие исследования по другим типам. Как только единицы .service будут применяться для запуска и остановки системных сервисов.
Каждая единица определяется в файле, расположенном в —
-
/ lib / systemd / system — файлы базовых модулей
-
/ etc / systemd / system — измененные файлы модулей запускаются во время выполнения
/ lib / systemd / system — файлы базовых модулей
/ etc / systemd / system — измененные файлы модулей запускаются во время выполнения
Управление сервисами с помощью systemctl
Для работы с systemd нам нужно очень хорошо ознакомиться с командой systemctl . Ниже приведены наиболее распространенные ключи командной строки для systemctl .
переключатель | действие |
---|---|
-t | Разделенные запятыми значения типов единиц, таких как service или socket |
-a | Показывает все загруженные единицы |
—государство | Показывает все юниты в определенном состоянии: загрузка, суб, активная, неактивная и т. Д. |
-ЧАС | Выполняет операцию удаленно. Укажите имя хоста или хост и пользователя через @. |
Основное использование systemctl
systemctl [operation] example: systemctl --state [servicename.service]
Для быстрого ознакомления со всеми сервисами, работающими на нашей коробке.
[root@localhost rdc]# systemctl -t service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher abrtd.service loaded active running ABRT Automated Bug Reporting Tool accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (restore and store) atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack blk-availability.service loaded active exited Availability of block devices bluetooth.service loaded active running Bluetooth service chronyd.service loaded active running NTP client/server
Остановка службы
Давайте сначала остановим службу bluetooth.
[root@localhost]# systemctl stop bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded inactive dead Bluetooth service [root@localhost]#
Как мы видим, служба bluetooth теперь неактивна.
Чтобы снова запустить службу Bluetooth.
[root@localhost]# systemctl start bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded active running Bluetooth service [root@localhost]#
Примечание. Мы не указали bluetooth.service, поскольку подразумевается .service . Рекомендуется думать о типе устройства, добавляющем сервис, с которым мы имеем дело. Итак, с этого момента мы будем использовать расширение .service, чтобы уточнить, что мы работаем над операциями подразделения обслуживания.
Основные действия, которые могут быть выполнены с сервисом:
Начните | Запускает сервис |
Стоп | Останавливает службу |
перезагружать | Перезагрузка активной конфигурации службы без остановки (например, kill -HUP в system v init) |
Запустить снова | Запускает, затем останавливает службу |
включить | Запускает сервис во время загрузки |
запрещать | Останавливает автоматический запуск службы во время выполнения |
Вышеуказанные действия в основном используются в следующих сценариях —
Начните | Чтобы вызвать сервис, который был переведен в остановленное состояние. |
Стоп | Временно отключить службу (например, когда необходимо остановить службу для доступа к файлам, заблокированным службой, как при обновлении службы) |
перезагружать | Когда файл конфигурации был отредактирован, и мы хотим применить новые изменения, не останавливая службу. |
Запустить снова | В том же сценарии, что и перезагрузка, но служба не поддерживает перезагрузку . |
включить | Когда мы хотим, чтобы отключенный сервис запускался во время загрузки. |
запрещать | Используется в основном, когда необходимо остановить службу, но она запускается при загрузке. |
Чтобы проверить статус услуги —
[root@localhost]# systemctl status network.service network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled) Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago Docs: man:systemd-sysv-generator(8) Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS) localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking... localhost.localdomain network[923]: Bringing up loopback interface: [ OK ] localhost.localdomain systemd[1]: Started LSB: Bring up/down networking. [root@localhost]#
Покажите нам текущее состояние сетевого сервиса. Если мы хотим увидеть все сервисы, связанные с сетью, мы можем использовать —
[root@localhost]# systemctl --all -t service | grep -i network network.service loaded active exited LSB: Bring up/ NetworkManager-wait-online.service loaded active exited Network Manager NetworkManager.service loaded active running Network Manager ntpd.service loaded inactive dead Network Time rhel-import-state.service loaded active exited Import network [root@localhost]#
Для тех, кто знаком с методом управления службами sysinit , важно перейти на systemd . systemd — это новый способ запуска и остановки сервисов демонов в Linux.