Où est / pourquoi n'y a-t-il pas de journal pour les services systemd des utilisateurs normaux?

26

J'essaie d'apprendre l'utilisation de base de systemd et j'ai rencontré un problème déroutant avec les unités de service utilisateur.

Lorsque vous exécutez des services ordinaires avec systemctl, lancez some.service Je peux trouver le journal complet de ce service (y compris ce qu'il a imprimé sur stdout / stderr, si je comprends bien) en exécutant sudo journalctl --unit some.service .

Considérez l'exemple de servicefile chatty.service :

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

Lorsque je place ce fichier de service dans ~ / .config / systemd / user / chatty.service et l'exécute avec systemctl --user start chatty.service, je ne trouve pas sa sortie envoyée à stdout dans journalctl, ni avec plain journalctl ni avec journalctl - -utilisateur . J'obtiens uniquement la sortie suivante dans les deux:

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.

Et journalctl --unit chatty.service ne renvoie rien du tout (avec ou sans --user ne fait aucune différence).

Alors que si je déplace le même fichier de service vers / etc / systemd / system et l'exécute avec sudo systemd start chatty.service, j'obtiens la sortie suivante lorsque j'exécute sudo journalctl --unit chatty.service :

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

Il semble que l'unité de service aux utilisateurs ne soit pas aussi bien intégrée d'une manière ou d'une autre, est-ce prévu, est-ce que je manque quelque chose ou est-ce un bug?

J'utilise openSUSE 13.1 x86-64, avec systemd 208 (installation par défaut).

Quantumboredom
la source
Même systemd 208 ici sur Arch Linux. Vous pouvez utiliser journalctl --user --user-unit chattypour obtenir ces messages de démarrage / d'arrêt de systemd, mais pas ce que le processus d'écho génère, du moins dans mon cas. Vous pouvez obtenir le message en écho avec journalctl --userou utiliser un autre filtre.
lilydjwg

Réponses:

20

Utilisez l' --user-unitoption, et dans votre cas ...

journalctl --user-unit chatty
elynnaie
la source
Recevez-vous également le message standard "test de chatty.service" dans la sortie du journal, ou simplement les messages "Starting chatty.service ..." et "Started chatty.service". messages?
Quantumboredom
Oui, j'ai également pu obtenir la sortie du processus (c'est-à-dire le message "test from chatty.service").
elynnaie
C'est ce à quoi je m'attendais également, mais je ne le vois pas ici. Puis-je demander quel système d'exploitation (avec version) vous utilisez?
Quantumboredom
Arch Linux 3.13.7-1. systemd version 212.
elynnaie
2
Je vois maintenant la sortie dans le journalctl principal. Mais quand j'essaie de courir, journalctl --userje reçois No journal files were found.Et ça journalctl --user-unit chattyn'a pas marché pour moi.
CMCDragonkai
6

Nécropostage, mais j'ai fait face et résolu le même problème aujourd'hui. Très probablement journalctl --user-unit chattyne fonctionnait pas pour vous car vous l'exécutez à partir de root. Cependant, par man journalctl, les --user-unitfiltres des entrées de journal non seulement par _SYSTEMD_USER_UNIT=, mais aussi par _UID=, et il n'y a pas de chattyservice avec uid root, donc pas d' entrées se trouvent.

Il est probable que vous ayez également essayé d'exécuter à journalctl --user-unit chattypartir de votre utilisateur habituel, mais vous avez réussi No journal files were found. Cela se produit parce que (et tous les utilisateurs ont accès à leurs revues privées par utilisateur de man journalctlpeut être source de confusion ici) en 2018 sur mon Debian 9 journalctl est toujours pas persistante par défaut ( Storage=autoen /etc/systemd/journald.confet /var/log/journal/n'existe pas), et non le mode persistant journaldne prend pas en charge le fractionnement des journaux, de sorte que tous les journaux se retrouvent au même endroit /run/log/journalmalgré le fait que le fractionnement est activé par défaut - voir SplitModedans man journald.conf. L'activation de la persistance résout ce problème.

TL; DR: permettre la persistance en mettant Storage=persistentà /etc/systemd/journald.confet le rechargement avec journald sudo systemctl restart systemd-journald.

Vous pouvez également rechercher avec sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

D'autres détails sont disponibles sur https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

ars
la source
2
Merci. J'obtenais No journal files were opened due to insufficient permissions.un "indice" déroutant sur la définition des autorisations, mais je ne devrais pas avoir à définir des autorisations car j'essaie d'accéder aux journaux utilisateur, pas aux journaux système. Votre solution a fonctionné. Merci beaucoup.
Rolf
3

Jusqu'à systemd v230 , vous deviez utiliser l' --user-unitindicateur moins intuitif pour afficher les journaux de l'unité de votre utilisateur:

journalctl --user-unit chatty

Depuis systemd v230, vous pouvez maintenant combiner les indicateurs --useret --unitcomme vous vous y attendez:

journalctl --user --unit chatty

La --user --unitsyntaxe est prise en charge depuis Ubuntu 17.10.

Mark Stosberg
la source
2
Je ne suis pas sûr que la fonctionnalité "--user --unit" fonctionne sur la v230 ... exécutant la v232 ici, et cette fonctionnalité ne fonctionne pas
LeGEC