Übersicht für systemctl
- Liste mit Diensten, die Probleme haben:
systemctl --failed
- Start/Stop/Restart a service:
systemctl start|stop|restart xyz.service …
- Restart a service, only if it's running:
systemctl try-restart xyz.service …
- Enable/Disable a service for start on boot-up:
systemctl enable|disable xyz.service …
- Status des Systems:
systemctl status
- Status eines Dienstes:
systemctl status xyz.service
- Konfiguration eines Dienstes mit override.conf anpassen:
systemctl edit getty@tty1.service
- Konfiguration eines Dienstes bearbeiten:
systemctl edit --full getty@tty1.service
- View config of a service:
systemctl cat getty@tty1.service
- Eine bestimmte Einstellung anzeigen:
systemctl show --property=After default.target
- Revert override.conf:
systemctl revert xyz.service
- Logging-Level für systemd anpassen:
systemd-analyze log-level debug
(Logmeldungen finden sich auch indmesg
) - Status von systemd ausgeben:
systemd-analyze dump
- Abhängigkeiten auflisten, Units die zuvor gestartet werden müssen:
systemctl list-dependencies …
https://wiki.archlinux.org/index.php/Systemd
Übersicht für journalctl
- Logmeldungen nach Priorität filtern:
journalctl -p err|warning
- Logmeldungen nach Dienstname filtern:
journalctl -u SERVICE
(-u
ist besser als-t
, da es auch die Meldungen von systemd enthält) - Logmeldungen in umgekehrter Reihenfolge:
journalctl -r
- Rechnernamen in Logmeldungen unterdrücken:
journalctl --no-hostname
- Boot-Zeitpunkte auflisten:
journalctl --list-boots
- Sollte journald mal aussteigen, gibt es auch noch Meldungen im Kernel-Log
mit
dmesg
.
Dauerhaft Logs aktivieren
Die Logs von journald werden in der Grundeinstellung (Storage=auto
in
/etc/systemd/journald.conf) nur dann dauerhaft gespeichert, wenn das
Verzeichnis /var/log/journal existiert. Anderenfalls beginnt das Journal nach
jedem Neustart von vor. Nach dem Erstellen des Verzeichnisses muss jounald
nicht neu gestartet werden. Das aktuelle Protokoll wird am Ende in das
Verzeichnis übertragen.
Cron-Jobs von Hand starten
Wenn es bei der Ausführung eines Cron-Jobs Probleme gab, kann man diesen mit
systemctl start cron-daily.target
noch einmal ausführen.
Speicherbegrenzung von Diensten
Damit ein Dienst nicht den kompletten RAM des Systems nutzen kann und dadurch
andere Prozesse behindert, kann man unter Linux mit cgroups die Ressourcen
beschränken. Systemd bietet hierfür auch praktische Einstellungen in den
Konfig-Dateien, so dass diese mit systemctl edit
gut zu einem Dienst
hinzufügen kann. Beschrieben sind all diese Parameter in
systemd.resource-control(5)
[Service]
# Ab dieser Grenze wird der Dienst ausgebremst
MemoryHigh=80%
# Hier ist dann Schluss und der OOM-Killer schlägt zu
MemoryMax=85%
Journal-Namen für Dienste festlegen
Systemd verwendet für die Protokolle bei Journald den Namen des Prozesses, was bei Programmen mit Interpretern wie python oder perl nicht passt. Daher kann man selbst den Namen setzen:
[Service]
SyslogIdentifier=my-srv
Damit funktioniert dann auch die Suche mit journalctl -t my-srv
.
Bootprozess analysieren
Systemd bringt gleich Werkzeuge zur Analyse des Bootprozess' mit, um zum
Beispiel zu erkennen, welche Dienste beim Start lange brauchen. Mit
systemd-analyze blame
bekommt man die Units mit ihrer Ausführungszeit
aufgelistet und mit systemd-analyze plot > /tmp/boot.svg
kann man eine Grafik
erstellen, in der der Bootablauf genau zu erkennen ist.
Mit systemd-analyze time
bekommt man eine Gesamtauswertung des Bootvorgangs
und sieht die benötigte Zeit in den Etappen firmware, loader, kernel und
userspace, bis das System gestartet war:
# systemd-analyze time
Startup finished in 8.067s (firmware) + 8.250s (loader) + 5.515s (kernel) + 9.423s (userspace) = 31.257s
graphical.target reached after 9.416s in userspace
Um konkret für eine bestimmte Unit zu ermitteln, wann sie bereit war und warum
es so lange gedauert hat, kann man mit systemd-analyze critical-chain
% systemd-analyze critical-chain systemd-networkd.socket
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.
systemd-networkd.socket @493ms
└─system.slice @361ms
└─-.slice @361ms
% systemd-analyze --user critical-chain syncthing.service
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.
syncthing.service @68ms
└─basic.target @66ms
└─sockets.target @66ms
└─dbus.socket @62ms +3ms
└─-.slice @57ms
D-Bus mit systemd verwalten
Unter Debian sollte man das Paket dbus-x11 gegen dbus-user-session ersetzen, wenn man systemd installiert hat.