使用 systemctl 作为 root 检查用户单元的单元状态

使用 systemctl 作为 root 检查用户单元的单元状态

我创建了一个用户单元(切片)并启动它。和:

cytrinox@pollux$ systemctl status --user --full firefox-limits.slice
● firefox-limits.slice - Firefox Slice
   Loaded: loaded (/home/cytrinox/.config/systemd/user/firefox-limits.slice; static; vendor preset: enabled)
   Active: active since Sun 2018-11-25 00:09:14 CET; 37min ago
   CGroup: /user.slice/user-1000.slice/[email protected]/firefox.slice/firefox-limits.slice
           └─run-r791a1fc1147748059accf82ecded4c56.scope
             ├─5291 /home/cytrinox/bin/Firefox/firefox
             ├─5451 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5500 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5517 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5539 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             └─5562 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre

Nov 25 00:09:14 pollux systemd[858]: Created slice Firefox Slice.

我可以检查当前状态。

但是作为root,我怎样才能获得这个用户单元的状态呢?

root@pollux:/etc/systemd/system# systemctl status --full firefox-limits.slice
● firefox-limits.slice
   Loaded: loaded
   Active: inactive (dead)

答案1

不幸的是,不,以 root 身份运行时无法访问在 systemd 单元管理器下运行的单元......

这是几乎可以通过systemctl --user status以 root 身份运行同时将XDG_RUNTIME_DIR环境变量设置为指向来做到这一点/run/user/<uid>(请参阅相关代码在bus_connect_user_systemd()),但不幸的是这还不够:

# XDG_RUNTIME_DIR=/run/user/1000 systemctl --user status
Failed to connect to bus: Operation not permitted

问题是,连接到用户管理器后,systemd 会检查正在运行的 uid 是否与systemctl拥有管理器套接字的 uid 相匹配(请参阅相关代码在bus_check_peercred())。

因此,您最好的选择就是成为su用户,以便检查设备的状态。此外,当使用 时su,您仍然需要设置XDG_RUNTIME_DIR,否则systemctl可能无法找到管理器的套接字:

# su cytrinox -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status'

systemctl status(或者您想要用于 Firefox 切片单元的适当命令...)

相关内容