systemctl und journalctl in der Praxis (1)
Mittlerweile sind viele Distributionen auf den neuen Init-Service systemd gewechselt, weil sie die Vorteile gegenüber den in die Jahre gekommenen SysVinit erkannt haben. Zusammen mit systemd wurde das Logging durch den journald abgelöst, der alle Meldung in das sogenannte Journal in binärer Form ablegt.
In diesem Blogbeitrag werde ich die grundlegenden Kommandos zu systemd bzw. journald vorstellen. Die Werkzeuge dazu sind bereits automatisch installiert wenn das System mit dem neuen Init-Service arbeitet. Alles was zum Starten, Stoppen ud Abfragen eines Service benötigt wird kann man mit dem Kommando systemctl erledigen. Im Journal werden alle Loginformationen gesammelt die man mit dem Werkzeug journalctl abfrägt.
Alle zu startenden Dienste werden u.a. beim Booten oder (Re)Start von sogenannten Services (Service-Dateien) gesteuert die die Initscripte von SysVinit ersetzen und massiv parallelisiert sind. Dadurch kommen extrem kurze Bootzeiten eines Linuxsystems zustande.
Welche Services gibt es auf meinem System
Mit dem Kommando systemctl kann man alle Services die konfiguriert sehr schnell ermitteln. Dazu gibt in der Konsole den nachfolgenden Befehl ein.
$ systemctl list-units --type=service
Ausgabe gekürzt
UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service alsa-restore.service loaded active exited Save/Restore Sound Card State apparmor.service loaded active exited LSB: AppArmor initialization avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack console-setup.service loaded active exited Set console font and keymap cron.service loaded active running Regular background program processing daemon cups-browsed.service loaded active running Make remote CUPS printers available locally cups.service loaded active running CUPS Scheduler dbus.service loaded active running D-Bus System Message Bus getty@tty1.service loaded active running Getty on tty1 getty@tty2.service loaded active running Getty on tty2 gpm.service loaded active running LSB: gpm sysv init script grub-common.service loaded active exited LSB: Record successful boot for GRUB hddtemp.service loaded active exited LSB: disk temperature monitoring daemon irqbalance.service loaded active running LSB: daemon to balance interrupts for SMP systems ....
Status, Starten und Stoppen eines Service
Will man den Status eines Services abfragen kann man dies durch das Schlüsselwort status und dem Namen des Service tun. Hier erhält man wertvolle Infomationen ob der Service (hier im Besipiel der cron-Daemon) fehlerfei seinen Dienst tut. Dazu werden einige Zeilen der letzten relevanten Logausgaben mit aufgelistet.
So hat auf einem Blick alle wichtigen Daten des angezeigten Service, wie u.a. Namen, Zustand, Laufzeit, Prozess-ID und alle Aufrufparameter des Daemon parat.
$ systemctl status cron.service
Ausgabe gekürzt
● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Mi 2018-03-14 08:40:06 CET; 8h ago Docs: man:cron(8) Main PID: 1266 (cron) CGroup: /system.slice/cron.service └─1266 /usr/sbin/cron -f -L 7 Mär 14 15:17:01 neonlight CRON[8210]: pam_unix(cron:session): session opened for user root by (uid=0) Mär 14 16:17:02 neonlight CRON[9316]: pam_unix(cron:session): session opened for user root by (uid=0)
Zum (Re)Starten oder Stoppen eines Service wird nur das jeweilige Schlüsselwort ausgetauscht. Zum erneuten Einlesen einer geänderten Konfiguration eines Dienstes, wird mit dem Schlüsselwort reload erledigt.
Restart eines Service:
$ systemctl restart cron.service
Reload eines Service:
$ systemctl reload cron.service
Start eines Service:
$ systemctl start cron.service
Stop eines Service:
$ systemctl stop cron.service
Anzeige der Loginformationen aus dem Journal
Mit dem Kommando journalctl kann man recht einfach aus den umfangreichen Logmeldungen genau die Infos ermitteln die man benötigt. Eine erste Übersicht bietet der Aufruf ohne Optionen. Hier im Beispiel wird alles an Logmeldungen aufgelistet seit das Journaling aktiv bzw. persistent ist, das mitunter eine lange Liste sein kann.
$ journalctl
Ausgabe gekürzt
-- Logs begin at Sa 2018-01-13 16:07:26 CET, end at Mi 2018-03-14 17:27:53 CET. -- Jan 13 16:07:26 neonlight systemd-journald[389]: Runtime journal (/run/log/journal/) is 8.0M, max 159.4M, 151.4M free. Jan 13 16:07:26 neonlight kernel: Linux version 4.10.0-42-generic (buildd@lgw01-amd64-007) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) Jan 13 16:07:26 neonlight kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.10.0-42-generic root=/dev/mapper/VGsys-LVroot ro quiet splash vt.handoff=7 Jan 13 16:07:26 neonlight kernel: KERNEL supported cpus: Jan 13 16:07:26 neonlight kernel: Intel GenuineIntel Jan 13 16:07:26 neonlight kernel: AMD AuthenticAMD Jan 13 16:07:26 neonlight kernel: Centaur CentaurHauls Jan 13 16:07:26 neonlight kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' Jan 13 16:07:26 neonlight kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' Jan 13 16:07:26 neonlight kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' Jan 13 16:07:26 neonlight kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 Jan 13 16:07:26 neonlight kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. Jan 13 16:07:26 neonlight kernel: e820: BIOS-provided physical RAM map: Jan 13 16:07:26 neonlight kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable Jan 13 16:07:26 neonlight kernel: BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
Will man Journal live mitverfolgen gibt es die Option -f, die bewirkt das die Anzeige laufend aktualisiert wird.
$ journalctl -f
Ausblick auf den nächsten Teil der Serie
Im zweiten Teil werde ich detaillierter auf die Anzeige von Loginformationen von ausgewählten Services eingehen. Desweiteren stelle ich die Targets des systemd vor.
Quelle Teaser-Logo: Photo by Aryan Dhiman on Unsplash