Как управлять службами Systemd с помощью Systemctl в Linux
На этой странице
- Предпосылки
- Проверьте Systemd
- Управление службами с помощью Systemd
- Управление файлами модулей Systemd
- Управление сокетами с помощью Systemctl
- Дополнительные команды Systemctl
- Заключение
Systemd — стандартный процесс управления службами запуска в операционных системах Linux. Он используется для управления тем, какие программы запускаются при загрузке системы Linux. Это системный менеджер, ставший новым стандартом для операционных систем Linux. Systemd позволяет вам создать собственный сервис systemd для запуска и управления любым процессом. В этом руководстве мы объясним, как управлять службами с помощью systemd в Linux.
Предпосылки
- Сервер под управлением Linux с Systemd, здесь я буду использовать сервер Ubuntu 20.04.
- Пароль root настраивается на сервере.
Проверить Systemd
По умолчанию Systemd предустановлен во всех основных операционных системах. Вы можете проверить установленную версию Systemd с помощью следующей команды:
systemctl --version
Вы должны увидеть следующий вывод:
systemd 245 (245.4-4ubuntu3) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
Вы можете найти расположение Systemd с помощью следующей команды:
whereis systemd
Вы должны получить следующий результат:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Чтобы найти местоположение systemctl, выполните следующую команду:
whereis systemctl
Вы должны получить следующий результат:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Вы также можете проверить, запущен ли Systemd, с помощью следующей команды:
ps -eaf | grep systemd
Вы должны получить следующий результат:
root 269 1 0 09:57 ? 00:00:01 /lib/systemd/systemd-journald root 294 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-udevd systemd+ 297 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-networkd message+ 319 1 0 09:57 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only root 329 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-logind systemd+ 382 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-resolved root 1128 1 0 10:47 ? 00:00:00 /lib/systemd/systemd --user root 1177 1152 0 10:48 pts/0 00:00:00 grep --color=auto systemd
Вы также можете проанализировать время, затрачиваемое каждым процессом при загрузке системы, с помощью следующей команды:
systemd-analyze blame
Вы должны получить следующий результат:
3.662s csm.service 1.899s apt-daily-upgrade.service 1.798s dev-sda1.device 1.400s systemd-logind.service 1.336s fstrim.service 1.207s systemd-networkd.service 1.131s systemd-resolved.service 856ms man-db.service 842ms systemd-journald.service 415ms e2scrub_reap.service 320ms keyboard-setup.service 295ms networkd-dispatcher.service 239ms systemd-udev-trigger.service
Чтобы проанализировать критическую цепочку при загрузке, выполните следующую команду:
systemd-analyze critical-chain
Вы должны получить следующий результат:
The time when unit became active or started is printed after the "@" character. The time the unit took to start is printed after the "+" character. graphical.target @4.948s ??multi-user.target @4.946s ??csm.service @1.282s +3.662s ??basic.target @1.277s ??sockets.target @1.276s ??dbus.socket @1.274s ??sysinit.target @1.257s ??systemd-update-utmp.service @1.247s +8ms ??systemd-tmpfiles-setup.service @1.228s +17ms ??systemd-journal-flush.service @1.201s +24ms ??systemd-journald.service @356ms +842ms ??systemd-journald.socket @313ms ??system.slice @225ms ??-.slice @225ms
Управление службами с помощью Systemd
Systemctl предоставляет более простой способ управления службами systemd.
Чтобы запустить службу Apache, выполните следующую команду:
systemctl start apache2
Чтобы перезапустить службу Apache, выполните следующую команду:
systemctl restart apache2
Чтобы остановить службу Apache, выполните следующую команду:
systemctl stop apache2
Чтобы перезагрузить службу Apache, выполните следующую команду:
systemctl reload apache2
Чтобы служба Apache запускалась после перезагрузки системы, выполните следующую команду:
systemctl enable apache2
Чтобы удалить службу Apache из системы при запуске, выполните следующую команду:
systemctl disable apache2
Чтобы убить службу Apache, выполните следующую команду:
systemctl kill apache2
Чтобы замаскировать службу Apache, выполните следующую команду:
systemctl mask apache2
Чтобы разоблачить процесс Apache, выполните следующую команду:
systemctl unmask apache2
Чтобы проверить, включена ли служба Apache, выполните следующую команду:
systemctl is-enabled apache2
Чтобы проверить состояние службы Apache, выполните следующую команду:
systemctl status apache2
Если служба запущена, вы должны получить следующий вывод:
? apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-01-09 10:53:12 UTC; 26s ago Docs: https://httpd.apache.org/docs/2.4/ Main PID: 1708 (apache2) Tasks: 55 (limit: 2353) Memory: 5.8M CGroup: /system.slice/apache2.service ??1708 /usr/sbin/apache2 -k start ??1709 /usr/sbin/apache2 -k start ??1710 /usr/sbin/apache2 -k start Jan 09 10:53:12 ubunt4 systemd[1]: Starting The Apache HTTP Server...
После переименования или удаления любого файла systemd вам нужно будет перезагрузить его, чтобы применить изменения. Чтобы перезагрузить файл службы systemd, выполните следующую команду:
systemctl daemon-reload
Управление файлами модулей Systemd
Приведенные выше команды будут полезны для управления отдельными службами. Однако его нельзя использовать для определения текущего состояния системы. Есть много других команд, полезных для предоставления этой информации.
Чтобы просмотреть список всех доступных юнитов, выполните следующую команду:
systemctl list-unit-files
Вы должны увидеть список всех юнит-файлов в следующем выводе:
UNIT FILE STATE VENDOR PRESET proc-sys-fs-binfmt_misc.automount static enabled -.mount generated enabled dev-hugepages.mount static enabled dev-mqueue.mount static enabled proc-sys-fs-binfmt_misc.mount disabled enabled sys-fs-fuse-connections.mount static enabled sys-kernel-config.mount static enabled sys-kernel-debug.mount static enabled sys-kernel-tracing.mount static enabled acpid.path enabled enabled ntp-systemd-netif.path enabled enabled systemd-ask-password-console.path static enabled systemd-ask-password-wall.path static enabled session-2.scope transient enabled acpid.service disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled
Чтобы просмотреть список всех активных юнитов, выполните следующую команду:
systemctl list-units
Вы должны увидеть следующий вывод:
UNIT LOAD ACTIVE SUB DESCRIPTION > proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable Fil> sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device loaded active plugged Virtio network device > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged QEMU_HARDDISK 1 > sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged QEMU_HARDDISK > sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS10.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS11.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS12.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS13.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS14.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS15.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS16.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS17.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS18.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS19.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS20.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS21.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS22.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS23.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS24.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS25.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS26.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS27.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS28.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS29.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS30.device loaded active plugged /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS31.device loaded active plugged /sys/devices/platform/se>
Чтобы просмотреть список всех отказавших устройств, выполните следующую команду:
systemctl --failed
Чтобы вывести список всех служб, включая включенные и отключенные службы, выполните следующую команду:
systemctl list-unit-files --type=service
Вы должны увидеть следующий вывод:
UNIT FILE STATE VENDOR PRESET acpid.service disabled enabled apache-htcacheclean.service disabled enabled disabled enabled apache2.service enabled enabled disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled static enabled cron.service enabled enabled cryptdisks-early.service masked enabled cryptdisks.service masked enabled csm.service enabled enabled dbus-org.freedesktop.hostname1.service static enabled dbus-org.freedesktop.locale1.service static enabled dbus-org.freedesktop.login1.service static enabled dbus-org.freedesktop.resolve1.service enabled enabled dbus-org.freedesktop.timedate1.service static enabled dbus-org.freedesktop.timesync1.service masked enabled dbus.service static enabled debug-shell.service disabled disabled dmesg.service enabled enabled static enabled e2scrub_all.service static enabled static enabled e2scrub_reap.service enabled enabled emergency.service static enabled fstrim.service static enabled getty-static.service static enabled enabled enabled
Вы можете увидеть свойства модуля SSH, выполнив следующую команду:
systemctl show sshd.service
Вы должны увидеть следующий вывод:
Id=sshd.service Names=sshd.service Requires=basic.target Wants=system.slice WantedBy=multi-user.target Conflicts=shutdown.target Before=shutdown.target multi-user.target After=syslog.target network.target auditd.service systemd-journald.socket basic.target system.slice Description=OpenSSH server daemon
Управление сокетами с помощью Systemctl
Вы также можете управлять сокетами с помощью команды Systemctl.
Чтобы получить список всех доступных системных сокетов, выполните следующую команду:
systemctl list-unit-files --type=socket
Вы должны увидеть следующий вывод:
UNIT FILE STATE VENDOR PRESET acpid.socket enabled enabled dbus.socket static enabled ssh.socket disabled enabled syslog.socket static disabled systemd-fsckd.socket static enabled systemd-initctl.socket static enabled systemd-journald-audit.socket static enabled systemd-journald-dev-log.socket static enabled static enabled systemd-journald.socket static enabled static enabled systemd-networkd.socket disabled enabled systemd-rfkill.socket static enabled systemd-udevd-control.socket static enabled systemd-udevd-kernel.socket static enabled
Чтобы запустить сокет SSH, выполните следующую команду:
systemctl start ssh.socket
Чтобы остановить сокет SSH, выполните следующую команду:
systemctl stop ssh.socket
Чтобы перезапустить сокет SSH, выполните следующую команду:
systemctl restart ssh.socket
Чтобы проверить состояние сокета SSH, выполните следующую команду:
systemctl status ssh.socket
Чтобы включить или отключить сокет SSH во время загрузки, выполните следующую команду:
systemctl enable ssh.socket
systemctl disable ssh.socket
Дополнительные команды Systemctl
Вы можете выполнить несколько задач с помощью команды systemctl. Если вы хотите перевести систему в однопользовательский режим, выполните следующую команду:
systemctl rescue
Чтобы остановить систему, выполните следующую команду:
systemctl halt
Чтобы выключить систему, выполните следующую команду:
systemctl poweroff
Чтобы перезапустить систему, выполните следующую команду:
systemctl reboot
Заключение
В приведенном выше руководстве вы узнали, как управлять и контролировать службу systemd в Linux. Я надеюсь, что это поможет вам взаимодействовать с экземпляром systemd и управлять им. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.