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
。