Systemd 用户服务失败

升级时或在全新安装期间运行 initialize-tsm 时可能会收到以下错误之一:

  • “Failed to get D-Bus connection: No such file or directory”(无法获取 D-Bus 连接:没有此类文件或目录)
  • “$XDG_RUNTIME_DIR not found”(找不到 $XDG_RUNTIME_DIR)
  • “systemd unit user@<userID> is not running.Check /var/log/messages or /var/log/syslog.”(“systemd 单元用户@<用户 ID> 未运行。请检查 /var/log/messages 或 /var/log/syslog。”)

背景

自 2018.1 起,Tableau Server 使用 systemd 用户服务来管理进程。这意味着有一个以无特权用户身份运行的 systemd 进程。默认情况下,Tableau Server 安装程序将创建名为 tableau 的无特权帐户。Tableau Server 进程派生自 systemd 进程,而不是以 root 用户身份运行的 systemd 系统范围进程。

重要信息:此故障排除说明主要适用于基于 RHEL 7 的发行版。但是,如果您看到这些错误之一,则 Ubuntu 发行版上可能存在同样的问题。

systemd 用户服务不像标准 systemd 过程管理器那样常用。Red Hat 禁用了 RHEL 7 中的 systemd 用户服务(并因此禁用了来自 RHEL 的所有发行版,比如 CentOS、Oracle Linux 7、Amazon Linux 2 中的该用户服务)。但是,RedHat 向 Tableau 保证,只要重新启用该服务,就支持运行 systemd 用户服务。

从 Linux 版 Tableau Server 10.5 升级

如果要从 Tableau Server 10.5 升级,请检查非特权用户是否具有有效的 shell 和主目录。对于 Tableau Server 10.5,Tableau 特意创建了 shell 设置为 /sbin/nologin 并且主目录设置为 / 的无特权用户。如果非特权用户是通过 initialize-tsm 创建的,则在升级到 2018.1 期间,Tableau 将更新 shell 和主目录。

但是,如果在 10.5 的初始安装过程中创建了非特权用户,则在尝试升级时将出现错误。

若要解决此问题,必须将 shell 设置为 /sbin/nologin,并将主目录设置为“/”,然后再次运行升级。

排查全新安装错误

验证 systemd 用户服务是否正在运行。

通过运行 ps -fww $(pgrep -f "systemd --user") 命令进行检查

如果 systemd 用户服务未运行,则某些内容阻止其启动。

请按照此列表进行故障排除:

  • 检查 /var/log/messages 中的日志

  • 运行 journalctl

  • 验证您可能对 PAM 配置进行的任何自定义是否未删除 pam_systemd.so

    如果 RHEL 7 PAM 文件 /etc/pam.d/system-auth 缺少以下行:

    -session optional pam_systemd.so

    然后必须将其添加回 Tableau Server 才能运行。

  • 如果 PAM 配置中有 -session optional pam_systemd.so, 存在,则用户服务无法启动,并且错误消息 $XDG_RUNTIME_DIR not found 显示在 /var/log/messages 中,请不要尝试设置环境变量。在这种情况下,错误不准确。

    真正的错误是 PAM 模块 pam_systemd.so 无法分配用户会话。默认配置禁止来自 pam_systemd.so 的错误消息。若要显示错误消息并调试消息,请将 /etc/pam.d/system-auth 中的行从 -session optional pam_systemd.so 更改为 session optional pam_systemd.so debug。(移除前导连字符将呈现错误消息,而添加 debug 将显示更详细的日志记录。)

    现在,您可以在 /var/log/messages/var/log/secure 文件中查看 /var/log/audit/audit.log 错误消息。

示例

您可能会看到以下错误消息:

systemd-logind: Failed to mount per-user tmpfs directory /run/user/0: Permission denied

在这种情况下,联机搜索错误会进入 Redhat KB 文章 https://access.redhat.com/solutions/2460611(链接在新窗口中打开)

本文建议通过运行 sudo yum update selinux-policy 更新 selinux-policy 包。

在某些情况下,从版本 3.12.X 升级到 3.13.X 可解决 $XDG_RUNTIME_DIR not found 问题。请务必在更新包之后运行 sudo reboot

感谢您的反馈!您的反馈已成功提交。谢谢!