ubuntu下如何列出另一个用户的用户服务

ubuntu下如何列出另一个用户的用户服务

有一个常用命令用于列出 systemd 服务:

systemctl list-units --type=service

然后是 --user 参数,用于启用和启动用户服务,从用户会话执行命令:

systemctl --user enable/start <service name>

我需要以 root 身份列出在特定用户下运行的服务,例如:

systemctl list-units --type=service --user <username>

还没有找到任何相关信息。这可能吗?

答案1

据我所知,这并不容易,因为你必须访问用户的 DBUS。我真的很想有一个简单的命令来列出所有服务,包括系统中所有用户的服务,但现在可能还做不到。

无论如何,有简单的方法Systemd >= 248如果您有想要列出其服务的特定用户,则可以执行您想要的操作。

Systemd >= 248

systemctl --user --machine=<username>@ list-units --type=service

这可能以类似的方式machinectl工作@Erik Sjölund 的回答

Systemd < 248

runuser -l <username> -c 'systemctl --user list-units --type=service'

奖励:列出所有用户的服务

这是对单行代码的拙劣模仿,它将列出系统上所有用户的所有用户服务。我只是把它粘起来了——不保证它是万无一失的。

对于 systemd>= 248

while read -r username; do echo $username: ; systemctl --user --machine=$username@ list-units --type=service --no-legend; done < <(ps axo user:100,args | awk '$2 == "/lib/systemd/systemd" && $3 == "--user" { print $1 }' | sort -u)

对于年龄较大的孩子来说:

while read -r username; do echo $username: ; runuser -l "$username" -c 'systemctl --user list-units --type=service --no-legend'; done < <(ps axo user:100,args | awk '$2 == "/lib/systemd/systemd" && $3 == "--user" { print $1 }' | sort -u)

/lib/ssytemd/systemd --user它只是在 systemd 中找到所有进程,获取它们正在运行的用户并使用该用户执行list-units上述命令。

答案2

使用machinectl如下命令:

machinectl shell <username>@ /usr/bin/systemctl --user list-units --type=service --quiet

以下是本地帐户的示例埃里克德夫在我的计算机上。

[root@laptop ~]# machinectl shell erikdev@ /usr/bin/systemctl --user list-units --type=service --quiet
Connected to the local host. Press ^] three times within 1s to exit session.
  systemd-tmpfiles-setup.service loaded active exited Create User's Volatile Files and Directories

Connection to the local host terminated.
[root@laptop ~]# 

我在跑Systemd 248Fedora 34Linux 计算机。

[root@laptop ~]# cat /etc/fedora-release 
Fedora release 34 (Thirty Four)
[root@laptop ~]# machinectl --version
systemd 248 (v248.3-1.fc34)
+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified
[root@laptop ~]# 

也许可以使用 来systemd-run代替machinectl,但我没能让它发挥作用。

答案3

是的,但可以使用sudo。阅读man sudo sudoers,然后

sudo -u theuser systemctl ...

就可以了。

相关内容