我需要 root 才能管理systemctl --user单位。
现在我已经user1设置了 systemd 用户单元。如果用户直接通过终端、GUI 或 SSH 登录,则可以运行所有systemctl --user命令。
当用户仍然登录时,我可以以 root 身份运行以下命令并systemctl --user在该用户上执行所有命令,没有任何问题:
su - user1 -c "systemctl --user status myunit.service"
Run Code Online (Sandbox Code Playgroud)
但是,如果用户注销,则任何人都无法systemctl --user以该用户身份运行命令,甚至 root 也不能。我会继续得到
Failed to connect to bus: No such file or directory
Run Code Online (Sandbox Code Playgroud)
即使我sudo - user1作为root,那也不够好,也会得到同样的错误。用户实际上需要登录才能管理该用户的单位。
显然这是一个已知的“问题”(当系统按设计运行时引用)。
注意:我尝试XDG_RUNTIME_DIR在user1s中设置环境变量bashrc,但这没有帮助。
另一位用户似乎找到了解决方法,但不起作用。看来开发商并不认可他的想法。
我发现的唯一解决方法是通过 ssh 进入用户帐户,在使用公钥进行身份验证后运行如下命令:
ssh user1@localhost -f 'systemctl --user status myunit.service'
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种不需要 SSH 连接的解决方法。当用户未登录时,我需要 root 才能管理 systemd …
-f我阅读了手册页,但在使用时找不到如何使用tmux list-panes。它似乎是一个过滤器,我认为这在某种程度上像 grep 一样工作?
有谁知道 -f 是如何工作的?