22

I'm trying to learn basic systemd usage and I've run into a confusing issue with user service units.

When running ordinary services with systemctl start some.service I can find the full log for this service (including what it has printed to stdout / stderr, as I understand it) by running sudo journalctl --unit some.service.

Consider the example servicefile chatty.service:

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

When I place this service file in ~/.config/systemd/user/chatty.service and run it with systemctl --user start chatty.service I cannot find its output sent to stdout in journalctl, neither with plain journalctl nor with journalctl --user. I only get the following output in both:

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.

And journalctl --unit chatty.service does not return anything at all (with or without --user makes no difference).

While if I move the same service file to /etc/systemd/system and run it with sudo systemd start chatty.service I then get the following output when I run 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

It seems like the user service unit isn't as well integrated somehow, is this expected, am I missing something or is it a bug?

I am running openSUSE 13.1 x86-64, with systemd 208 (default install).

  • Same systemd 208 here on Arch Linux. You can use journalctl --user --user-unit chatty to get those start/stop messages from systemd, but not what the echo process outputs, at least in my case. You can get the echoed message with journalctl --user or use some other filter. – lilydjwg Jan 22 '14 at 17:11
19

Use --user-unit option, and in your case...

journalctl --user-unit chatty
  • Are you getting the "test from chatty.service" stdout message in the log output as well, or just the "Starting chatty.service..." and "Started chatty.service." messages? – Quantumboredom Mar 28 '14 at 18:34
  • Yes, I was able to get the output from the process as well (i.e. the "test from chatty.service" message). – elynnaie Mar 29 '14 at 13:15
  • That is what I was expecting as well, but I don't see it here. May I ask what operating system (with version) you are running? – Quantumboredom Mar 30 '14 at 12:31
  • Arch Linux 3.13.7-1. systemd version 212. – elynnaie Mar 31 '14 at 6:52
  • 2
    I see the output in the main journalctl now. But when I try running journalctl --user I get No journal files were found. And the journalctl --user-unit chatty didn't work for me. – CMCDragonkai Jul 22 '14 at 6:22
3

Until systemd v230, you had to use the less intuitive --user-unit flag to view the logs for your user's unit:

journalctl --user-unit chatty

Since systemd v230, you can now combine the --user and --unit flags as you'd expect:

journalctl --user --unit chatty

The --user --unit syntax is supported since Ubuntu 17.10.

  • I'm not sur the "--user --unit" feature works on v230 ... running v232 here, and this feature doesn't work – LeGEC Oct 25 '18 at 14:12
2

Necroposting, but I faced and resolved the same issue today. Most probably journalctl --user-unit chatty didn't work for you because you run it from root. However, per man journalctl, --user-unit filters log entries not only by _SYSTEMD_USER_UNIT=, but also by _UID=, and there is no chatty service with root's uid, so no entries are found.

It's likely that you also have tried to run journalctl --user-unit chatty from your usual user, but got No journal files were found. This happens because (and All users are granted access to their private per-user journals from man journalctl can be confusing here) in 2018 on my Debian 9 journalctl still is not persistent by default (Storage=auto in /etc/systemd/journald.conf, and /var/log/journal/ doesn't exist), and in non-persistent mode journald doesn't support splitting logs, so all logs end up in single place in /run/log/journal despite the fact that splitting is turned on by default -- see SplitMode in man journald.conf. Enabling persistency fixes this.

TL;DR: enable persistency by putting Storage=persistent to /etc/systemd/journald.conf and reloading journald with sudo systemctl restart systemd-journald.

Alternatively, search with sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Some more details are at https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

  • Thank you. I was getting No journal files were opened due to insufficient permissions. with a confusing "hint" about setting permissions, but I should not have to set permissions because I am trying to access user logs, not system logs. Your fix worked. Many thanks. – Rolf May 22 at 13:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.