journalctl ist das zentrale Werkzeug zum Lesen von systemd-Logs. Es ersetzt unter modernen Distributionen weitgehend klassische Logdateien unter /var/log/. Hier die wichtigsten Befehle.
Grundlegende Nutzung
# Alle Logs seit letztem Boot
journalctl -b
# Letzten 100 Einträge, live mitverfolgen
journalctl -n 100 -f
# Logs eines bestimmten Dienstes
journalctl -u nginx.service -n 50
# Nur Fehler und kritische Meldungen
journalctl -p err -b
# Logs einer bestimmten Zeitspanne
journalctl --since "2026-05-01" --until "2026-05-15 12:00"
# Logs des aktuellen Boots nach Priorität filtern
journalctl -b -p warning
Logs persistent speichern
Standardmäßig speichert systemd Logs nur im RAM (/run/log/journal/). Nach einem Reboot sind sie weg. Für persistente Logs:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
# Optional: Maximale Größe begrenzen
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
SystemKeepFree=100M
MaxRetentionSec=30day
Dienst-Debugging
Wenn ein Dienst nicht startet, liefert journalctl deutlich mehr Kontext als systemctl status:
# Vollständige Fehlerausgabe eines Dienstes
journalctl -u mein-dienst.service -b --no-pager
# Kernel-Meldungen (äquivalent zu dmesg)
journalctl -k -b
# Kritische Boot-Fehler der letzten 3 Boots
journalctl -p crit -b -3 --no-pager
# Export für Bug-Report
journalctl -u mein-dienst -b --no-pager > /tmp/service-debug.log
Formatierung & Ausgabe
# JSON-Format (für Parsing)
journalctl -u nginx -n 20 -o json | jq ".MESSAGE"
# Nur Zeitstempel + Meldung
journalctl -u nginx -o short-monotonic
# Spezifisches Binary
journalctl _EXE=/usr/bin/python3 -n 30
Wer regelmäßig Dienste debuggt, sollte sich ein Alias anlegen: alias jf="journalctl -f -n 50" — damit hat man einen schnellen Live-Tail aller System-Logs parat.