有一个常用命令用于列出 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 248在Fedora 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 ...
就可以了。