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).

1
  • 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
    Commented Jan 22, 2014 at 17:11

3 Answers 3

38

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

journalctl --user-unit chatty
7
  • 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? Commented Mar 28, 2014 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
    Commented Mar 29, 2014 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? Commented Mar 30, 2014 at 12:31
  • 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. Commented Jul 22, 2014 at 6:22
  • 4
    The intuitive thing would be --user -u, but no...
    – Velkan
    Commented Jul 7, 2017 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

4
  • 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
    Commented May 22, 2019 at 13:21
  • 1
    This really helped: sudo journalctl _SYSTEMD_USER_UNIT=chatty.service. Commented Apr 20, 2020 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
    Commented Sep 30, 2021 at 23:42
  • I don't know why it's not working for me, there is no output :( (working on ubuntu 10)
    – jaques-sam
    Commented Apr 7, 2023 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.

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .