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).
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 mitjournalctl --user
einem anderen Filter abrufen oder einen anderen Filter verwenden.Antworten:
Verwenden Sie die
--user-unit
Option, und in Ihrem Fall ...quelle
journalctl --user
bekomme ichNo journal files were found.
Und dasjournalctl --user-unit chatty
hat bei mir nicht funktioniert.Necroposting, aber ich stand heute vor dem gleichen Problem und löste es. Höchstwahrscheinlich
journalctl --user-unit chatty
hat es bei Ihnen nicht funktioniert, weil Sie es von root aus ausführen. Doch jeman journalctl
,--user-unit
Filter - Log - Einträge nicht nur durch_SYSTEMD_USER_UNIT=
, sondern auch_UID=
, und es gibt keinenchatty
Service mit root uid, so dass keine Einträge gefunden werden.Es ist wahrscheinlich, dass Sie auch versucht haben,
journalctl --user-unit chatty
von Ihrem normalen Benutzer zu laufen , aber habenNo journal files were found
. Dies geschieht, weil (und Alle Benutzer haben Zugriff auf ihre privaten Benutzerjournale abman journalctl
können hier verwirrend sein) im Jahr 2018 in meinem Debian 9-Journalctl standardmäßig immer noch nicht persistent ist (Storage=auto
in/etc/systemd/journald.conf
, und/var/log/journal/
existiert nicht) und in nicht Der permanente Modusjournald
unterstützt das Aufteilen von Protokollen nicht. Daher werden alle Protokolle an einer einzigen Stelle in/run/log/journal
gespeichert, obwohl das Aufteilen standardmäßig aktiviert ist - sieheSplitMode
inman journald.conf
. Das Aktivieren der Persistenz behebt dieses Problem.TL; DR: enable persistency , indem sie
Storage=persistent
auf/etc/systemd/journald.conf
und Neuladen journald mitsudo 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
quelle
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.Bis zu systemd v230 mussten Sie das weniger intuitive
--user-unit
Flag verwenden, um die Protokolle für die Einheit Ihres Benutzers anzuzeigen:Seit systemd v230 können Sie die Flags
--user
und nun--unit
wie erwartet kombinieren :Die
--user --unit
Syntax wird seit Ubuntu 17.10 unterstützt.quelle