If alice has a user level systemd service unit named foo.service located at /home/alice/.config/systemd/user/foo.service then I can switch user to alice and check the status of the unit using the --user switch:

root@srv0:~# su - alice
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
alice@srv0:~$ systemctl status foo.service --user 
● foo.service - foo
   Loaded: loaded (/home/alice/.config/systemd/user/foo.service; disabled; v
   Active: active (running) since Sat 2019-03-23 04:11:03 UTC; 2min 6s ago
 Main PID: 2246 (python3)
   CGroup: /user.slice/user-20021.slice/user@20021.service/foo.service
           └─2246 python3 /home/alice/devapp foo bar baz

Is it possible to check the unit status (and also manipulate the unit) without switching user first?

I've tried using sudo but it's not working:

root@srv0:~# sudo -l -u alice systemctl status --user foo
/bin/systemctl status --user foo
root@srv0:~# sudo -u alice systemctl status --user foo
Failed to connect to bus: No such file or directory

I've also tried using user@UID syntax, also not working:

root@srv0:~# systemctl status user@1001:foo
● user@1001:foo.service - User Manager for UID 1001:foo
   Loaded: loaded (/lib/systemd/system/user@.service; static; vendor preset: enabled)
   Active: inactive (dead)
  • Maybe systemctl status can show all the cgroups on your system? – 炸鱼薯条德里克 Mar 23 at 5:01

According to this discussion https://lists.freedesktop.org/archives/systemd-devel/2014-March/018227.html something like this would work:

env XDG_RUNTIME_DIR=/run/user/1000 sudo --preserve-env=XDG_RUNTIME_DIR -u alice systemctl status --user foo

You just need to get XDG_RUNTIME_DIR somehow.

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.