39

I am running user-level services in Ubuntu 16.04 LTS. For example, I have my test.service located at ~/.config/systemd/user/test.service.

I was able to run the service by doing

systemctl --user start test.target

However, when I try to read its log using journalctl, I got this error message:

journalctl --user -u test.service
Hint: You are currently not seeing messages from other users and the system.
  Users in the 'systemd-journal' group can see all messages. Pass -q to
  turn off this notice.
No journal files were opened due to insufficient permissions.

How can I use journalctl for user's specific unit?

Alexis Wilke
  • 2,057
  • 1
  • 18
  • 33
ChromeHearts
  • 510
  • 1
  • 4
  • 8

2 Answers2

24

On older systemd versions, you'll have to use journalctl --user --user-unit=SERVICENAME (on newer versions journalctl --user -u SERVICENAME will work fine).

However, this only works if the Storage directive of the [Journal] section of /etc/systemd/journald.conf is set to persistent (instead of auto or volatile). Reboot after editing the configuration file and the user will be able to see the journal.

More information: https://www.freedesktop.org/software/systemd/man/journald.conf.html https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

D Schlachter
  • 356
  • 2
  • 4
  • 3
    Adding the user to the systemd-journal group was the answer I needed (from that mailing list link). – Travis Well Jun 30 '17 at 21:41
  • This worked for me on Ubuntu 17.10, where one user inexplicably couldn't view his logs, while another could. – datu-puti Dec 21 '17 at 18:04
  • 4
    Adding a user to the systemd-journal group would be a workaround, but since my service was a user service, I don't think the logs were generated in the first place, so allowing my user to view all the other logs wouldn't have helped anyway. – datu-puti Dec 21 '17 at 18:10
  • `journalctl --user-unit SERVICENAME` works fine even with storage set to volatile. But any of `-u SERVICENAME`, `--user -u SERVICENAME` or `--user --user-unit SERVICENAME` do not work with volatile storage, they all just show "no entries". – Kankaristo Nov 05 '21 at 21:14
  • 1
    You dont need to restart the box, you can just run `systemctl restart systemd-journald` after making the change to `/etc/systemd/journald.conf`. Also the user in question MUST have a uid > 1000 (non system user). if you want to run journalctl commands inside of a different systemd --user unit. – Dave Mar 21 '22 at 22:51
2

I was not able to make it work with the --user and other such options. However, I can see the data when I use journalctl on its own. It includes all the logs, though. I can search the specific app I'm interested in and look at that output. To find the latest, I first go at the end of the file then search backward:

  1. Hit G to go to the end (it's a capital G)

  2. Hit ? and enter your apps name

It's not as practical, but on the device on which I work (a Jetson), that was pretty much the only way I found to make it work.

Alexis Wilke
  • 2,057
  • 1
  • 18
  • 33