5

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)
mbigras
  • 3,100

1 Answers1

1

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.

sparse
  • 31
  • There's more to it than just that. See https://unix.stackexchange.com/a/423648/5132 , https://unix.stackexchange.com/a/431915/5132 , and https://unix.stackexchange.com/a/434647/5132 for starters. – JdeBP Mar 23 '19 at 10:24