Systemd standardní proces pro správu spouštěcích služeb v operačních systémech Linux. Používá se pro kontrolu, které programy se spouštějí při startu systému Linux. Je to systémový manažer a stal se novým standardem pro operační systémy Linux. Systemd vám umožňuje vytvořit vlastní službu systemd pro spouštění a správu jakéhokoli procesu. V tomto tutoriálu vysvětlíme, jak spravovat služby pomocí systemd na Linuxu.
Předpoklady
- Server se systémem Linux se systémem Systemd, zde budu používat server Ubuntu 20.04.
- Na serveru je nakonfigurováno heslo uživatele root.
Ověřit Systemd
Ve výchozím nastavení je Systemd předinstalován ve všech hlavních operačních systémech. Nainstalovanou verzi Systemd můžete ověřit pomocí následujícího příkazu:
systemctl --version
Měli byste vidět následující výstup:
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
Umístění Systemd můžete najít pomocí následujícího příkazu:
whereis systemd
Měli byste získat následující výstup:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Chcete-li najít umístění systemctl, spusťte následující příkaz:
whereis systemctl
Měli byste získat následující výstup:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Můžete také ověřit, zda Systemd běží nebo ne, pomocí následujícího příkazu:
ps -eaf | grep systemd
Měli byste získat následující výstup:
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
Můžete také analyzovat dobu, kterou každý proces zabere při spouštění systému, pomocí následujícího příkazu:
systemd-analyze blame
Měli byste získat následující výstup:
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
Chcete-li analyzovat kritický řetězec při spouštění, použijte následující příkaz:
systemd-analyze critical-chain
Měli byste získat následující výstup:
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
Správa služeb pomocí Systemd
Systemctl poskytuje jednodušší způsob správy služeb systemd.
Chcete-li spustit službu Apache, spusťte následující příkaz:
systemctl start apache2
Chcete-li restartovat službu Apache, spusťte následující příkaz:
systemctl restart apache2
Chcete-li zastavit službu Apache, spusťte následující příkaz:
systemctl stop apache2
Chcete-li znovu načíst službu Apache, spusťte následující příkaz:
systemctl reload apache2
Chcete-li povolit spuštění služby Apache po restartování systému, spusťte následující příkaz:
systemctl enable apache2
Chcete-li odebrat službu Apache ze spouštění systému, spusťte následující příkaz:
systemctl disable apache2
Chcete-li službu Apache ukončit, spusťte následující příkaz:
systemctl kill apache2
Chcete-li maskovat službu Apache, spusťte následující příkaz:
systemctl mask apache2
Chcete-li odmaskovat proces Apache, spusťte následující příkaz:
systemctl unmask apache2
Chcete-li zkontrolovat, zda je služba Apache povolena nebo ne, spusťte následující příkaz:
systemctl is-enabled apache2
Chcete-li zkontrolovat stav služby Apache, spusťte následující příkaz:
systemctl status apache2
Pokud je služba spuštěna, měli byste získat následující výstup:
? 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 ubuntu2004 systemd[1]: Starting The Apache HTTP Server...
Po přejmenování nebo odstranění jakéhokoli souboru systemd jej budete muset znovu načíst, aby se změny projevily. Chcete-li znovu načíst soubor služby systemd, spusťte následující příkaz:
systemctl daemon-reload
Správa souborů systémových jednotek
Výše uvedené příkazy budou užitečné pro správu jednotlivých služeb. Nelze jej však použít k nalezení aktuálního stavu systému. Existuje mnoho dalších příkazů, které jsou užitečné pro poskytování těchto informací.
Chcete-li zobrazit seznam všech dostupných jednotek, spusťte následující příkaz:
systemctl list-unit-files
V následujícím výstupu byste měli vidět seznam všech souborů jednotek:
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 [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] 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
Chcete-li zobrazit seznam všech aktivních jednotek, spusťte následující příkaz:
systemctl list-units
Měli byste vidět následující výstup:
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>
Chcete-li zobrazit seznam všech neúspěšných jednotek, spusťte následující příkaz:
systemctl --failed
Chcete-li zobrazit seznam všech služeb včetně povolených a zakázaných služeb, spusťte následující příkaz:
systemctl list-unit-files --type=service
Měli byste vidět následující výstup:
UNIT FILE STATE VENDOR PRESET acpid.service disabled enabled apache-htcacheclean.service disabled enabled [email protected] disabled enabled apache2.service enabled enabled [email protected] disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled [email protected] enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled [email protected] 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 [email protected] static enabled e2scrub_all.service static enabled [email protected] static enabled e2scrub_reap.service enabled enabled emergency.service static enabled fstrim.service static enabled getty-static.service static enabled [email protected] enabled enabled
Můžete vidět vlastnosti jednotky SSH, spusťte následující příkaz:
systemctl show sshd.service
Měli byste vidět následující výstup:
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
Správa soketů pomocí Systemctl
Sokety můžete také spravovat pomocí příkazu Systemctl.
Chcete-li zobrazit všechny dostupné systémové sokety, spusťte následující příkaz:
systemctl list-unit-files --type=socket
Měli byste vidět následující výstup:
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 [email protected] static enabled systemd-journald.socket static enabled [email protected] static enabled systemd-networkd.socket disabled enabled systemd-rfkill.socket static enabled systemd-udevd-control.socket static enabled systemd-udevd-kernel.socket static enabled
Chcete-li spustit soket SSH, spusťte následující příkaz:
systemctl start ssh.socket
Chcete-li zastavit soket SSH, spusťte následující příkaz:
systemctl stop ssh.socket
Chcete-li restartovat soket SSH, spusťte následující příkaz:
systemctl restart ssh.socket
Chcete-li zkontrolovat stav soketu SSH, spusťte následující příkaz:
systemctl status ssh.socket
Chcete-li povolit nebo zakázat soket SSH při spouštění, spusťte následující příkaz:
systemctl enable ssh.socket
systemctl disable ssh.socket
Další příkazy Systemctl
Pomocí příkazu systemctl můžete provést několik úloh. Pokud chcete uvést systém do režimu pro jednoho uživatele, spusťte následující příkaz:
systemctl rescue
Chcete-li systém zastavit, spusťte následující příkaz:
systemctl halt
Chcete-li systém vypnout, spusťte následující příkaz:
systemctl poweroff
Chcete-li restartovat systém, spusťte následující příkaz:
systemctl reboot
Závěr
Ve výše uvedené příručce jste se naučili, jak spravovat a ovládat službu systemd v systému Linux. Doufám, že vám to pomůže při interakci a ovládání vaší instance systemd. Neváhejte se mě zeptat, pokud máte nějaké otázky.