Wo ist / warum gibt es kein Protokoll für normale systemd-Benutzerdienste?

26

Ich versuche, die grundlegende Systemnutzung zu erlernen, und bin auf ein verwirrendes Problem mit Benutzer-Serviceeinheiten gestoßen.

Wenn ich normale Dienste mit systemctl starte, starte some.service . Wenn ich sudo journalctl --unit some.service starte, kann ich das vollständige Protokoll für diesen Dienst (einschließlich dessen, was in stdout / stderr gedruckt wurde, so wie ich es verstehe) finden .

Betrachten Sie das Beispiel servicefile chatty.service :

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"

Wenn ich diese Servicedatei in ~ / .config / systemd / user / chatty.service lege und sie mit systemctl ausführe - user start chatty.service Ich kann ihre Ausgabe weder mit plain journalctl noch mit journalctl an stdout in journalctl senden. -user . Ich erhalte nur die folgende Ausgabe in beiden:

Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.

Und journalctl --unit chatty.service gibt überhaupt nichts zurück (mit oder ohne --user macht keinen Unterschied).

Wenn ich dieselbe Servicedatei nach / etc / systemd / system verschiebe und sie mit sudo systemd starte, starte ich chatty.service und erhalte die folgende Ausgabe, wenn ich sudo journalctl --unit chatty.service starte :

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.
Jan 15 19:28:08 qbd-x230-suse.site echo[27098]: test from chatty.service

Es sieht so aus, als ob die Benutzer-Service-Einheit nicht so gut integriert ist. Wird dies erwartet? Vermisse ich etwas oder handelt es sich um einen Fehler?

Ich verwende openSUSE 13.1 x86-64 mit systemd 208 (Standardinstallation).

Quantumboredom
quelle
Gleiches System 208 hier auf Arch Linux. Sie können verwenden journalctl --user --user-unit chatty, um diese Start- / Stopp-Meldungen von systemd abzurufen, aber nicht, was der Echo-Prozess ausgibt, zumindest in meinem Fall. Sie können die Echo-Nachricht mit journalctl --usereinem anderen Filter abrufen oder einen anderen Filter verwenden.
Lilydjwg

Antworten:

20

Verwenden Sie die --user-unitOption, und in Ihrem Fall ...

journalctl --user-unit chatty
elynnaie
quelle
Erhalten Sie die Standardmeldung "Test von chatty.service" auch in der Protokollausgabe oder nur die Meldungen "chatty.service wird gestartet ..." und "chatty.service wurde gestartet"? Mitteilungen?
Quantumboredom
Ja, ich konnte auch die Ausgabe des Prozesses erhalten (dh die Meldung "test from chatty.service").
Elynnaie
Das habe ich auch erwartet, aber ich sehe es hier nicht. Darf ich fragen, welches Betriebssystem (mit Version) Sie ausführen?
Quantumboredom
Arch Linux 3.13.7-1. systemd version 212.
elynnaie
2
Ich sehe die Ausgabe jetzt im Hauptjournal. Aber wenn ich versuche zu rennen journalctl --userbekomme ich No journal files were found.Und das journalctl --user-unit chattyhat bei mir nicht funktioniert.
CMCDragonkai
6

Necroposting, aber ich stand heute vor dem gleichen Problem und löste es. Höchstwahrscheinlich journalctl --user-unit chattyhat es bei Ihnen nicht funktioniert, weil Sie es von root aus ausführen. Doch je man journalctl, --user-unitFilter - Log - Einträge nicht nur durch _SYSTEMD_USER_UNIT=, sondern auch _UID=, und es gibt keinen chattyService mit root uid, so dass keine Einträge gefunden werden.

Es ist wahrscheinlich, dass Sie auch versucht haben, journalctl --user-unit chattyvon Ihrem normalen Benutzer zu laufen , aber haben No journal files were found. Dies geschieht, weil (und Alle Benutzer haben Zugriff auf ihre privaten Benutzerjournale ab man journalctlkönnen hier verwirrend sein) im Jahr 2018 in meinem Debian 9-Journalctl standardmäßig immer noch nicht persistent ist ( Storage=autoin /etc/systemd/journald.conf, und /var/log/journal/existiert nicht) und in nicht Der permanente Modus journaldunterstützt das Aufteilen von Protokollen nicht. Daher werden alle Protokolle an einer einzigen Stelle in /run/log/journalgespeichert, obwohl das Aufteilen standardmäßig aktiviert ist - siehe SplitModein man journald.conf. Das Aktivieren der Persistenz behebt dieses Problem.

TL; DR: enable persistency , indem sie Storage=persistentauf /etc/systemd/journald.confund Neuladen journald mit sudo systemctl restart systemd-journald.

Alternativ suchen Sie mit sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Weitere Informationen finden Sie unter https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

ars
quelle
2
Vielen Dank. Ich bekam No journal files were opened due to insufficient permissions.einen verwirrenden "Hinweis" zum Festlegen von Berechtigungen, aber ich sollte keine Berechtigungen festlegen müssen, da ich versuche, auf Benutzerprotokolle und nicht auf Systemprotokolle zuzugreifen. Ihr Fix hat funktioniert. Danke vielmals.
Rolf
3

Bis zu systemd v230 mussten Sie das weniger intuitive --user-unitFlag verwenden, um die Protokolle für die Einheit Ihres Benutzers anzuzeigen:

journalctl --user-unit chatty

Seit systemd v230 können Sie die Flags --userund nun --unitwie erwartet kombinieren :

journalctl --user --unit chatty

Die --user --unitSyntax wird seit Ubuntu 17.10 unterstützt.

Mark Stosberg
quelle
2
Ich bin mir nicht sicher, ob die Funktion "--user --unit" auf v230 läuft ... hier wird v232 ausgeführt, und diese Funktion funktioniert nicht
LeGEC