So verwalten Sie Systemd-Dienste mit Systemctl unter Linux
Systemd ein Standardprozess zur Verwaltung von Startdiensten in Linux-Betriebssystemen. Er dient zur Steuerung, welche Programme beim Hochfahren des Linux-Systems ausgeführt werden. Er ist ein Systemmanager und hat sich zum neuen Standard für Linux-Betriebssysteme entwickelt. Mit Systemd können Sie einen benutzerdefinierten systemd-Dienst erstellen, um beliebige Prozesse auszuführen und zu verwalten. In diesem Tutorial wird erklärt, wie Sie Dienste mit systemd unter Linux verwalten können.
Voraussetzungen
- Ein Server, auf dem Linux mit Systemd läuft, ich verwende hier einen Ubuntu 20.04 Server.
- Der Server ist mit einem Root-Passwort konfiguriert.
Überprüfen von Systemd
Standardmäßig ist Systemd in allen gängigen Betriebssystemen vorinstalliert. Sie können die installierte Version von Systemd mit dem folgenden Befehl überprüfen:
systemctl --version
Sie sollten die folgende Ausgabe sehen:
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
Sie können den Speicherort des Systemd mit dem folgenden Befehl ermitteln:
whereis systemd
Sie sollten die folgende Ausgabe erhalten:
systemd: /usr/bin/systemd /usr/lib/systemd /etc/systemd /usr/share/systemd /usr/share/man/man1/systemd.1.gz
Sie können den Speicherort von systemctl mit folgendem Befehl ermitteln:
whereis systemctl
Sie sollten die folgende Ausgabe erhalten:
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
Sie können auch mit dem folgenden Befehl überprüfen, ob der Systemd ausgeführt wird oder nicht:
ps -eaf | grep systemd
Sie sollten die folgende Ausgabe erhalten:
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
Sie können auch die Zeit analysieren, die die einzelnen Prozesse beim Systemstart benötigen, und zwar mit dem folgenden Befehl:
systemd-analyze blame
Sie sollten die folgende Ausgabe erhalten:
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
Mit dem folgenden Befehl können Sie die kritische Kette beim Systemstart analysieren:
systemd-analyze critical-chain
Sie sollten die folgende Ausgabe erhalten:
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
Verwalten von Diensten mit Systemd
Systemctl bietet eine einfachere Möglichkeit, die systemd-Dienste zu verwalten.
Um den Apache-Dienst zu starten, führen Sie den folgenden Befehl aus:
systemctl start apache2
Um den Apache-Dienst neu zu starten, führen Sie den folgenden Befehl aus:
systemctl restart apache2
Um den Apache-Dienst anzuhalten, führen Sie den folgenden Befehl aus:
systemctl stop apache2
Um den Apache-Dienst neu zu laden, führen Sie den folgenden Befehl aus:
systemctl reload apache2
Um den Apache-Dienst nach einem Neustart des Systems starten zu lassen, führen Sie den folgenden Befehl aus:
systemctl enable apache2
Um den Apache-Dienst aus dem Systemstart zu entfernen, führen Sie den folgenden Befehl aus:
systemctl disable apache2
Um den Apache-Dienst zu beenden, führen Sie den folgenden Befehl aus:
systemctl kill apache2
Um den Apache-Dienst zu maskieren, führen Sie den folgenden Befehl aus:
systemctl mask apache2
Um den Apache-Prozess zu demaskieren, führen Sie den folgenden Befehl aus:
systemctl unmask apache2
Um zu prüfen, ob der Apache-Dienst aktiviert ist oder nicht, führen Sie den folgenden Befehl aus:
systemctl is-enabled apache2
Um den Status des Apache-Dienstes zu überprüfen, führen Sie den folgenden Befehl aus:
systemctl status apache2
Wenn der Dienst ausgeführt wird, sollten Sie die folgende Ausgabe erhalten:
? 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...
Nachdem Sie eine systemd-Datei umbenannt oder gelöscht haben, müssen Sie sie neu laden, damit die Änderungen übernommen werden. Um die systemd-Dienstdatei neu zu laden, führen Sie den folgenden Befehl aus:
systemctl daemon-reload
Verwalten von systemd-Einheitsdateien
Die obigen Befehle sind für die Verwaltung einzelner Dienste nützlich. Sie können jedoch nicht verwendet werden, um den aktuellen Zustand des Systems zu ermitteln. Es gibt eine Menge anderer Befehle, die für diese Informationen nützlich sind.
Um eine Liste aller verfügbaren Units zu sehen, führen Sie den folgenden Befehl aus:
systemctl list-unit-files
In der folgenden Ausgabe sollten Sie eine Liste aller Unit-Dateien sehen:
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 autovt@.service enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled container-getty@.service 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
Um eine Liste aller aktiven Units zu sehen, führen Sie den folgenden Befehl aus:
systemctl list-units
Sie sollten die folgende Ausgabe sehen:
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>
Um eine Liste aller ausgefallenen Geräte anzuzeigen, führen Sie den folgenden Befehl aus:
systemctl --failed
Um alle Dienste einschließlich der aktivierten und deaktivierten Dienste aufzulisten, führen Sie den folgenden Befehl aus:
systemctl list-unit-files --type=service
Sie sollten die folgende Ausgabe sehen:
UNIT FILE STATE VENDOR PRESET acpid.service disabled enabled apache-htcacheclean.service disabled enabled apache-htcacheclean@.service disabled enabled apache2.service enabled enabled apache2@.service disabled enabled apt-daily-upgrade.service static enabled apt-daily.service static enabled autovt@.service enabled enabled console-getty.service disabled disabled console-setup.service enabled enabled container-getty@.service 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 e2scrub@.service static enabled e2scrub_all.service static enabled e2scrub_fail@.service static enabled e2scrub_reap.service enabled enabled emergency.service static enabled fstrim.service static enabled getty-static.service static enabled getty@.service enabled enabled
Um die Eigenschaften der SSH-Einheit zu sehen, führen Sie den folgenden Befehl aus:
systemctl show sshd.service
Sie sollten die folgende Ausgabe sehen:
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
Verwalten von Sockets mit Systemctl
Sie können Sockets auch mit dem Befehl Systemctl verwalten.
Um alle verfügbaren Systemsockel aufzulisten, führen Sie den folgenden Befehl aus:
systemctl list-unit-files --type=socket
Sie sollten die folgende Ausgabe sehen:
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 systemd-journald-varlink@.socket static enabled systemd-journald.socket static enabled systemd-journald@.socket static enabled systemd-networkd.socket disabled enabled systemd-rfkill.socket static enabled systemd-udevd-control.socket static enabled systemd-udevd-kernel.socket static enabled
Um den SSH-Socket zu starten, führen Sie den folgenden Befehl aus:
systemctl start ssh.socket
Um den SSH-Socket zu stoppen, führen Sie den folgenden Befehl aus:
systemctl stop ssh.socket
Um den SSH-Socket neu zu starten, führen Sie den folgenden Befehl aus:
systemctl restart ssh.socket
Um den Status des SSH-Sockets zu überprüfen, führen Sie den folgenden Befehl aus:
systemctl status ssh.socket
Um den SSH-Socket beim Booten zu aktivieren und zu deaktivieren, führen Sie den folgenden Befehl aus:
systemctl enable ssh.socket systemctl disable ssh.socket
Systemctl Weitere Befehle
Mit dem Befehl systemctl können Sie mehrere Aufgaben ausführen. Wenn Sie das System in den Einzelbenutzermodus versetzen möchten, führen Sie den folgenden Befehl aus:
systemctl rescue
Um das System anzuhalten, führen Sie den folgenden Befehl aus:
systemctl halt
Um das System herunterzufahren, führen Sie den folgenden Befehl aus:
systemctl poweroff
Um das System neu zu starten, führen Sie den folgenden Befehl aus:
systemctl reboot
Fazit
In der obigen Anleitung haben Sie gelernt, wie Sie den systemd-Dienst unter Linux verwalten und steuern können. Ich hoffe, dies hilft Ihnen bei der Interaktion mit und der Steuerung Ihrer systemd-Instanz. Wenn Sie Fragen haben, können Sie sich gerne an mich wenden.