45

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

3 Answers3

39

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

journalctl --user-unit chatty
tshepang
  • 65,642
elynnaie
  • 520
  • 4
  • 9
  • 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 06:52
  • 3
    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 06:22
  • I'm not sure, but perhaps Googling your error might help you out. I found this post on the Arch boards that seems to be relevant: https://bbs.archlinux.org/viewtopic.php?pid=1335223 – elynnaie Jul 23 '14 at 12:55
  • 4
    The intuitive thing would be --user -u, but no... – Velkan Jul 07 '17 at 12:12
15

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

ars
  • 343
  • 2
    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 '19 at 13:21
  • 1
    This really helped: sudo journalctl _SYSTEMD_USER_UNIT=chatty.service. – Ali Momen Sani Apr 20 '20 at 21:59
  • 1
    All i'm getting are logs about whether the service started or failed, but not output from the program itself. I see the program's output in the system journal but can't find a way to filter only this output. – Lamp Sep 30 '21 at 23:42
  • I don't know why it's not working for me, there is no output :( (working on ubuntu 10) – jaques-sam Apr 07 '23 at 13:34
7

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.

  • 5
    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