Systemd ist ein Standardprozess zum Verwalten von Startdiensten in Linux-Betriebssystemen. Es wird verwendet, um zu steuern, welche Programme ausgeführt werden, wenn das Linux-System hochfährt. Es 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 jeden Prozess auszuführen und zu verwalten. In diesem Tutorial erklären wir, wie man Dienste mit systemd unter Linux verwaltet.
Voraussetzungen
- Ein Server, auf dem Linux mit Systemd ausgeführt wird, ich werde hier einen Ubuntu 20.04-Server verwenden.
- Ein Root-Passwort wird auf dem Server konfiguriert.
Systemd überprüfen
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 von Systemd mit dem folgenden Befehl finden:
wo ist 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
Führen Sie den folgenden Befehl aus, um den Speicherort von systemctl zu finden:
wo ist 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 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-journaldroot 294 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-udevdsystemd+ 297 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-networkdmessage+ 319 1 0 09:57 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd:--nofork --nopidfile --systemd-activation --syslog-onlyroot 329 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-logindsystemd+ 382 1 0 09:57 ? 00:00:00 /lib/systemd/systemd-resolvedroot 1128 1 0 10:47 ? 00:00:00 /lib/systemd/systemd --userroot 1177 1152 0 10:48 pts/0 00:00:00 grep --color=auto systemd
Mit dem folgenden Befehl können Sie auch die Zeit analysieren, die jeder Prozess beim Systemstart benötigt:
Systemd-Analyze-Schuld
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
Analysieren Sie die kritische Kette beim Booten mit dem folgenden Befehl:
systemd-analyse der kritischen Kette
Sie sollten die folgende Ausgabe erhalten:
Die Zeit, zu der die Einheit aktiv wurde oder gestartet wurde, wird nach dem Zeichen „@“ gedruckt. Die Zeit, die die Einheit zum Starten benötigte, wird nach dem Zeichen „+“ gedruckt.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
Dienste mit Systemd verwalten
Systemctl bietet eine einfachere Möglichkeit, die systemd-Dienste zu verwalten.
Führen Sie den folgenden Befehl aus, um den Apache-Dienst zu starten:
systemctl startet Apache2
Führen Sie den folgenden Befehl aus, um den Apache-Dienst neu zu starten:
systemctl startet Apache2 neu
Führen Sie den folgenden Befehl aus, um den Apache-Dienst zu stoppen:
systemctl stoppt Apache2
Führen Sie den folgenden Befehl aus, um den Apache-Dienst neu zu laden:
systemctl apache2 neu laden
Führen Sie den folgenden Befehl aus, damit der Apache-Dienst nach dem Systemneustart gestartet werden kann:
systemctl aktiviert Apache2
Führen Sie den folgenden Befehl aus, um den Apache-Dienst beim Systemstart zu entfernen:
systemctl deaktiviert Apache2
Führen Sie den folgenden Befehl aus, um den Apache-Dienst zu beenden:
systemctl kill apache2
Führen Sie den folgenden Befehl aus, um den Apache-Dienst zu maskieren:
systemctl mask apache2
Führen Sie den folgenden Befehl aus, um den Apache-Prozess zu demaskieren:
systemctl unmask Apache2
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der Apache-Dienst aktiviert ist oder nicht:
systemctl is-enabled apache2
Führen Sie den folgenden Befehl aus, um den Status des Apache-Dienstes zu überprüfen:
systemctl-Status apache2
Wenn der Dienst ausgeführt wird, sollten Sie die folgende Ausgabe erhalten:
Nachdem Sie eine systemd-Datei umbenannt oder gelöscht haben, müssen Sie sie neu laden, um die Änderungen zu übernehmen. Um die systemd-Dienstdatei neu zu laden, führen Sie den folgenden Befehl aus:
systemctl daemon-reload
Systemd-Unit-Dateien verwalten
Die obigen Befehle sind nützlich, um einzelne Dienste zu verwalten. Es kann jedoch nicht verwendet werden, um den aktuellen Zustand des Systems zu ermitteln. Es gibt viele andere Befehle, die nützlich sind, um diese Informationen bereitzustellen.
Führen Sie den folgenden Befehl aus, um eine Liste aller verfügbaren Einheiten anzuzeigen:
systemctl list-unit-files
In der folgenden Ausgabe sollten Sie eine Liste aller Unit-Dateien sehen:
UNIT FILE STATE VENDOR PRESETproc-sys-fs-binfmt_misc.automount statisch aktiviert -.mount generiert aktiviert dev-hugepages.mount statisch aktiviert dev-mqueue.mount statisch aktiviert proc-sys-fs-binfmt_misc.mount deaktiviert aktiviert sys- fs-fuse-connections.mount statisch aktiviert sys-kernel-config.mount statisch aktiviert sys-kernel-debug.mount statisch aktiviert sys-kernel-tracing.mount statisch aktiviert acpid.path aktiviert aktiviert ntp-systemd-netif.path aktiviert aktiviert systemd-ask-password-console.path statisch aktiviert systemd-ask-password-wall.path statisch aktiviert session-2.scope tran sient aktiviert acpid.service deaktiviert aktiviert apt-daily-upgrade.service statisch aktiviert apt-daily.service statisch aktiviert [email-geschützt] aktiviert aktiviert console-getty.service deaktiviert deaktiviert console-setup.service aktiviert aktiviert [email-geschützt] statisch aktiviert cron .service aktiviert aktiviert cryptdisks-early.service maskiert aktiviert cryptdisks.service maskiert aktiviert csm.service aktiviert aktiviert dbus-org.freedesktop.hostname1.service statisch aktiviert dbus-org.freedesktop.locale1.service statisch aktiviert
Führen Sie den folgenden Befehl aus, um eine Liste aller aktiven Einheiten anzuzeigen:
systemctl list-units
Sie sollten die folgende Ausgabe sehen:
UNIT LOAD ACTIVE SUB DESCRIPTION> proc-sys-fs-binfmt_misc.automount geladen aktiv warten Beliebige ausführbare Datei> sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device geladen aktiv Plugged Virtio Netzwerkgerät> sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth1.device geladen aktiv angeschlossen Virtio-Netzwerkgerät> sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2 :0:0-2:0:0:0-block-sda-sda1.device geladen aktiv angeschlossen QEMU_HARDDISK 1> sys-devices-pci0000:00-0000:00:05.0-virtio2-host2-target2:0:0- 2:0:0:0-block-sda.device geladen aktiv angeschlossen QEMU_HARDDISK> sys-devices-platform-serial8250-tty-ttyS1.device geladen aktiv angeschlossen /sys/devices/platfo rm/se> sys-devices-platform-serial8250-tty-ttyS10.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS11.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS12.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS13.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS14.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS15.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS16.device geladen aktiv angeschlossen /sys/devices/platf orm/se> sys-devices-platform-serial8250-tty-ttyS17.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS18.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS19.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS2.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS20.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS21.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS22.device geladen aktiv angeschlossen /sys/devices/plat form/se> sys-devices-platform-serial8250-tty-ttyS23.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS24.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS25.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS26.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS27.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS28.device geladen aktiv angeschlossen /sys/devices/ Plattform/se> sys-devices-platform-serial8250-tty-ttyS29.device geladen aktiv angeschlossen /sys/devices/pla tform/se> sys-devices-platform-serial8250-tty-ttyS3.device geladen aktiv angeschlossen /sys/devices/platform/se> sys-devices-platform-serial8250-tty-ttyS30.device geladen aktiv angeschlossen /sys/devices/ platform/se> sys-devices-platform-serial8250-tty-ttyS31.device geladen aktiv angeschlossen /sys/devices/platform/se>
Führen Sie den folgenden Befehl aus, um eine Liste aller ausgefallenen Einheiten anzuzeigen:
systemctl --failed
Führen Sie den folgenden Befehl aus, um alle Dienste einschließlich aktivierter und deaktivierter Dienste aufzulisten:
systemctl list-unit-files --type=service
Sie sollten die folgende Ausgabe sehen:
UNIT FILE STATE VENDOR PRESETacpid.service deaktiviert aktiviert apache-htcacheclean.service deaktiviert aktiviert [E-Mail-geschützt] deaktiviert aktiviert apache2.service aktiviert aktiviert [E-Mail-geschützt] deaktiviert aktiviert apt-daily-upgrade.service statisch aktiviert apt-daily.service statisch aktiviert [E-Mail-geschützt] aktiviert aktiviert console-getty.service deaktiviert deaktiviert console-setup.service aktiviert aktiviert [E-Mail-geschützt] statisch aktiviert cron.service aktiviert aktiviert cryptdisks-early.service maskiert aktiviert cryptdisks.service maskiert ena bled csm.service aktiviert aktiviert dbus-org.freedesktop.hostname1.service statisch aktiviert dbus-org.freedesktop.locale1.service statisch aktiviert dbus-org.freedesktop.login1.service statisch aktiviert dbus-org.freedesktop.resolve1.service aktiviert aktiviert dbus-org.freedesktop.timedate1.service statisch aktiviert dbus-org.freedesktop.timesync1.service maskiert aktiviert dbus.service statisch aktiviert debug-shell.service deaktiviert deaktiviert dmesg.service aktiviert aktiviert [E-Mail-geschützt] statisch aktiviert e2scrub_all.service statisch aktiviert [E-Mail-geschützt] statisch aktiviert e2scrub_reap.service aktiviert aktiviert emergency.service st atic aktiviert fstrim.service statisch aktiviert getty-static.service statisch aktiviert [E-Mail-geschützt] aktiviert aktiviert
Sie können die Eigenschaften der SSH-Einheit sehen, führen Sie den folgenden Befehl aus:
systemctl show sshd.service
Sie sollten die folgende Ausgabe sehen:
Id=sshd.serviceNames=sshd.serviceRequires=basic.targetWants=system.sliceWantedBy=multi-user.targetConflicts=shutdown.targetBefore=shutdown.target multi-user.targetAfter=syslog.target network.target auditd.service systemd -journald.socket basic.target system.sliceDescription=OpenSSH-Server-Daemon
Sockets mit Systemctl verwalten
Sie können Sockets auch mit dem Systemctl-Befehl verwalten.
Führen Sie den folgenden Befehl aus, um alle verfügbaren System-Sockets aufzulisten:
systemctl list-unit-files --type=socket
Sie sollten die folgende Ausgabe sehen:
UNIT FILE STATE VENDOR PRESETacpid.socket aktiviert aktiviert dbus.socket statisch aktiviert ssh.socket deaktiviert aktiviert syslog.socket statisch deaktiviert systemd-fsckd.socket statisch aktiviert systemd-initctl.socket statisch aktiviert systemd-journald-audit.socket statisch aktiviert systemd-journald-dev-log.socket statisch aktiviert [E-Mail-geschützt] statisch aktiviert systemd-journald.socket statisch aktiviert [E-Mail-geschützt] statisch aktiviert systemd-networkd.socket deaktiviert aktiviert systemd-rfkill.socket statisch aktiviert systemd-udevd-control. Socket statisch aktiviert systemd-udevd-kernel.socket statisch aktiviert
Führen Sie den folgenden Befehl aus, um den SSH-Socket zu starten:
systemctl startet ssh.socket
Führen Sie den folgenden Befehl aus, um den SSH-Socket zu stoppen:
systemctl stop ssh.socket
Führen Sie den folgenden Befehl aus, um den SSH-Socket neu zu starten:
systemctl startet ssh.socket neu
Führen Sie den folgenden Befehl aus, um den Status des SSH-Sockets zu überprüfen:
Systemctl-Status ssh.socket
Führen Sie den folgenden Befehl aus, um den SSH-Socket beim Booten zu aktivieren und zu deaktivieren:
systemctl aktiviert ssh.socket
systemctl deaktiviert ssh.socket
Zusätzliche Systemctl-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-Rettung
Führen Sie den folgenden Befehl aus, um das System anzuhalten:
systemctl anhalten
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-Neustart
Schlussfolgerung
In der obigen Anleitung haben Sie gelernt, wie Sie den systemd-Dienst unter Linux verwalten und steuern. Ich hoffe, dies wird Ihnen helfen, mit Ihrer systemd-Instanz zu interagieren und sie zu steuern. Fühlen Sie sich frei, mich zu fragen, wenn Sie irgendwelche Fragen haben.