
Systemctl ist mittlerweile jedem Admin der sich außerhalb der Windows Welt bewegt bekannt. Wie man mit systemctl Dienste starten und stoppen kann, haben ich hier im Blog schon vor einiger Zeit erklärt. Heute will ich ein paar nützliche Befehle im Zusammenhang mit systemctl zeigen, die einem den Arbeitsalltag erleichtern können.
Inhaltsverzeichnis
Anzeigen der Unit Liste
Um eine Liste aller aktiven Einheiten zu sehen, die das System kennt, können wir den Befehl list-units verwenden. Das ganze sieht zb. auf meinem Raspberry Pi wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | systemctl list-units UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point sys-devices-platform-serial8250-tty-ttyS0.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS0 sys-devices-platform-soc-3f201000.serial-tty-ttyAMA0.device loaded active plugged /sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0 sys-devices-platform-soc-3f202000.sdhost-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0-mmcblk0p1.device loaded active plugged /sys/devices/platform/soc/3f202000.sdhost/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 sys-devices-platform-soc-3f202000.sdhost-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0-mmcblk0p2.device loaded active plugged /sys/devices/platform/soc/3f202000.sdhost/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p2 sys-devices-platform-soc-3f202000.sdhost-mmc_host-mmc0-mmc0:aaaa-block-mmcblk0.device loaded active plugged /sys/devices/platform/soc/3f202000.sdhost/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 sys-devices-platform-soc-3f300000.mmc-mmc_host-mmc1-mmc1:0001-mmc1:0001:1-ieee80211-phy0-rfkill0.device loaded active plugged /sys/devices/platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/ieee80211/phy0/rfkill0 sys-devices-platform-soc-3f300000.mmc-mmc_host-mmc1-mmc1:0001-mmc1:0001:1-net-wlan0.device loaded active plugged /sys/devices/platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0 sys-devices-platform-soc-3f980000.usb-usb1-1\x2d1-1\x2d1.1-1\x2d1.1:1.0-net-eth0.device loaded active plugged SMSC9512/9514 Fast Ethernet Adapter sys-devices-platform-soc-soc:audio-sound-card1.device loaded active plugged /sys/devices/platform/soc/soc:audio/sound/card1 sys-devices-virtual-net-docker0.device loaded active plugged /sys/devices/virtual/net/docker0 sys-devices-virtual-net-veth0c300db.device loaded active plugged /sys/devices/virtual/net/veth0c300db sys-devices-virtual-tty-ttyprintk.device loaded active plugged /sys/devices/virtual/tty/ttyprintk sys-module-configfs.device loaded active plugged /sys/module/configfs sys-module-fuse.device loaded active plugged /sys/module/fuse ... sound.target loaded active active Sound Card swap.target loaded active active Swap sysinit.target loaded active active System Initialization timers.target loaded active active Timers systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 130 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'. |
Da diese Liste sehr lang ist, habe ich einen Teil der Units in der Mitte entfernt und durch … ersetzt.
Bei der Ausgabe werden die folgenden fünf Spalten angegeben:
- UNIT: Der Name der Systemeinheit.
- LOAD: Ob die Konfiguration der Unit vom System geladen wurde. Die Konfiguration der geladenen Unit wird im Speicher gehalten.
- ACTIVE: Ein zusammenfassender Status darüber, ob die Unit aktiv ist. Dies ist in der Regel eine ziemlich einfache Methode, um festzustellen, ob die Unit erfolgreich gestartet wurde oder nicht.
- SUB: Dies ist ein untergeordneter Zustand, der detailliertere Informationen über die Unit anzeigt. Dies variiert oft je nach Unit, Zustand und der tatsächlichen Modus, in der die Unit läuft.
- DESCRIPTION: Eine kurze Beschreibung dessen, was die Unit ist/macht.
Anzeigen der Unit Datei
Manchmal ist es hilfreich, sich die Konfigurationsdatei für einen Dienst anzeigen zu lassen. Diese findet man für unter anderem in /etc/systemd/system. Man kann sich den Inhalt aber auch direkt mit dem systemctl Befehl anzeigen lassen. Ich zeige das hier mal an dem sshd Dienst:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | systemctl cat sshd.service # /lib/systemd/system/ssh.service [Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target Alias=sshd.service |
Hier sehen wir nun, wie der ssh Dienst definiert wurde. In der ersten Zeile ist als Kommentar der Pfad zur Konfigurationsdatei hinterlegt, damit man diese ggf. mit einem Editor öffnen kann um Änderungen durchführen zu können.
Unit Dependency
In einer Konfigurationsdatei für einen dienst kann man auch Abhängigkeiten definieren. Das sind zum Beispiel Dienste, die zuerst gestartet sein müssen. Im Kontext von sshd sehen wir, dass der ssh Dienst von einigen anderen Diensten abhängt. Nur wenn diese Dienste vorher erfolgreich gestartet wurde, kann auch der ssh Dienst gestartet werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ystemctl list-dependencies sshd.service sshd.service ● ├─system.slice ● └─basic.target ● ├─alsa-restore.service ● ├─alsa-state.service ● ├─paths.target ● ├─slices.target ● │ ├─-.slice ● │ └─system.slice ● ├─sockets.target ● │ ├─avahi-daemon.socket ● │ ├─dbus.socket ● │ ├─docker.socket ● │ ├─systemd-initctl.socket ● │ ├─systemd-journald-dev-log.socket ● │ ├─systemd-journald.socket ● │ ├─systemd-shutdownd.socket ● │ ├─systemd-udevd-control.socket ● │ └─systemd-udevd-kernel.socket ● ├─sysinit.target ● │ ├─console-setup.service ● │ ├─debian-fixup.service ● │ ├─dev-hugepages.mount ● │ ├─dev-mqueue.mount ● │ ├─fake-hwclock.service ● │ ├─kbd.service ● │ ├─keyboard-setup.service ● │ ├─kmod-static-nodes.service ● │ ├─networking.service ● │ ├─plymouth-read-write.service ● │ ├─plymouth-start.service ● │ ├─proc-sys-fs-binfmt_misc.automount ● │ ├─raspi-config.service ● │ ├─sys-fs-fuse-connections.mount ● │ ├─sys-kernel-config.mount ● │ ├─sys-kernel-debug.mount ● │ ├─systemd-ask-password-console.path ● │ ├─systemd-binfmt.service ● │ ├─systemd-journal-flush.service ● │ ├─systemd-journald.service ● │ ├─systemd-modules-load.service ● │ ├─systemd-random-seed.service ● │ ├─systemd-sysctl.service ● │ ├─systemd-tmpfiles-setup-dev.service ● │ ├─systemd-tmpfiles-setup.service ● │ ├─systemd-udev-trigger.service ● │ ├─systemd-udevd.service ● │ ├─systemd-update-utmp.service ● │ ├─udev-finish.service ● │ ├─cryptsetup.target ● │ ├─local-fs.target ● │ │ ├─-.mount ● │ │ ├─boot.mount ● │ │ ├─systemd-fsck-root.service ● │ │ └─systemd-remount-fs.service ● │ └─swap.target ● └─timers.target ● └─systemd-tmpfiles-clean.timer |
Es kann sein, dass hier mal eine Abhängigkeit nicht gestartet ist, und der Dienst trotzdem funktioniert. Hier kann es dann sein, dass der Dienst so konfiguriert ist das diese Teilkomponente gerade nicht benötigt wird.
Maskierung
Maskierung im Zusammenhang mit Diensten von systemctl bedeutet, dass Dienste unbrauchbar gemacht werden. Das hat zur folge das diese Dienst weder durch einen Automatismus noch durch einen manuellen Befehl gestartet werden kann. Eine Maskierung setzt man wie folgt:
1 | systemctl mask killprocs.service |
Das ganze kann man sich dann auch anzeigen lassen:
1 2 3 4 5 6 7 8 9 | systemctl list-unit-files UNIT FILE STATE ... initrd-udevadm-cleanup-db.service static kafka.service disabled killprocs.service masked kmod-static-nodes.service static kmod.service static ... |
Dies sind nun erstmal die ersten vier Befehl die ich immer wieder in meinem Alltag mit systemctl verwende. Ich hoffe das diese dem ein oder anderen in seinem Alltag weiterhelfen kann.
Habt ihr selber nützlichen Tipps oder Tricks im Zusammenhang mit systemctl? Dann hinterlass mir doch ein kurzes Kommentar.
Schreibe einen Kommentar