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.

Das könnte dich auch interessieren …