Ubuntu 20.04 不允许“runuser”管理 systemd --user 服务“无法连接到总线:没有此文件或目录”

Ubuntu 20.04 不允许“runuser”管理 systemd --user 服务“无法连接到总线:没有此文件或目录”

当我尝试runuser -l mruser -c "systemctl --user status myservice.service"以 root 身份运行时,出现以下错误:

Failed to connect to bus: No such file or directory

在 RHEL 8.4 系统上执行相同操作时,我没有收到此错误。我可以使用 runuser 以 mruser 身份运行 systemd --user 命令,没有任何问题。

已执行故障排除:

  • 尝试systemctl --user status myservice.servicemruser命令运行,没有错误。
  • 我已经检查过 loginctl 了mruserLinger=yes
  • 检查以确保有一个systemd --user进程正在运行ps
  • 使用单独的 ssh 会话直接登录到用户帐户,然后在原始会话中尝试以 root 身份执行相同的命令,仍然出现相同的错误。
  • mruser已经export XDG_RUNTIME_DIR=/run/user/$(id -u)~/.bashrc
  • 尝试重新启动系统,仍然没有反应。
  • 已读这个帖子,没有什么帮助。

在 RHEL 系统上,systemd 是 v239,在 Ubuntu 20.04 上是 v245。我是不是漏掉了什么?为什么我不能在 Ubuntu 上以 root 身份运行 systemd --user 命令?

runuser更新:我认为问题与看不到导出的变量有关。这意味着$XDG_RUNTIME_DIR无法识别或使用。有人知道为什么 runuser 没有看到文件中定义的导出变量吗mruser~/.bashrc我检查了 RHEL 实例,root 能够查看和使用导出的变量。

答案1

我找到了问题所在。这是~/.bashrcmyuser 的文件。在 Ubuntu 上,默认.bashrc文件包含以下行:

case $- in
      *i*);;
        *) return;;
esac

这不在 RHEL 默认.bashrc文件中。此 case 语句正在寻找要使用的参数bash -i。没有它,shell 就不是交互式的,也.bashrc不会被使用,因此,定义$XDG_RUNTIME_DIR永远不会被看到,因此systemd --user命令会失败。

我还没有找到一种方法来runuser强制这个案例陈述识别发送-i

解决方法:我使用此命令删除了以下行:

sed -i '/case $- in/,/esac/ s/^/# /' /home/mruser/.bashrc

完成此操作后,runuser在 Ubuntu 上以 root 身份运行即可正常运行。如果有人知道如何让此 case 语句识别-irunuser请分享,我会更新此解决方案。但目前这就是我正在做的事情。

答案2

Failed to connect to bus: No such file or directory在 Ubuntu 20.04 上运行以下命令时我遇到了同样的错误( ):

systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service

问题是由于别名引起的:

alias systemctl='sudo systemctl'

它用 sudo 替换了systemctlsudo systemctl从而导致了错误。

相关内容