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 –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.