43

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

3 Answers 3

34

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? 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
    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? Mar 30, 2014 at 12:31
  • 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. Jul 22, 2014 at 6:22
  • 2
    The intuitive thing would be --user -u, but no...
    – Velkan
    Jul 7, 2017 at 12:12
14

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

3
  • 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, 2019 at 13:21
  • 1
    This really helped: sudo journalctl _SYSTEMD_USER_UNIT=chatty.service. 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
    Sep 30, 2021 at 23:42
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
    Oct 25, 2018 at 14:12

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.