Systemd 使用者服務失敗

升級時或在全新安裝期間執行 initialize-tsm 時,您可能會收到以下其中一種錯誤:

  • 「無法取得 D-Bus 連線:找不到這個檔案或目錄」
  • 「找不到 $XDG_RUNTIME_DIR」
  • 「systemd 單元使用者@<userID> 並未執行。請檢查 /var/log/messages or /var/log/syslog。」

背景

自 2018.1 起,Tableau Server 皆使用 systemd 使用者服務來管理程序。也就是說系統中有一個 systemd 程序以無權限使用者身份執行。預設情況下,Tableau Server 設定會建立名為 tableau 的無權限帳戶。Tableau Server 程序衍生自 systemd 程序,而非以根目錄執行的系統層級 systemd 程序。

重要提示:此疑難排解說明主要適用於 RHEL 7 發行版。不過,如果您看到上述其一錯誤,很可能 Ubuntu 發行版也存在同樣的問題。

systemd 使用者服務並不如一般 systemd 程序管理員那樣常用。Red Hat 停用了 systemd RHEL 7 中的使用者服務(因此 CentOS、Oracle Linux 7、Amazon Linux 2 等所有來自 RHEL 的發行版皆不可用)。但是,RedHat 向 Tableau 擔保只要重新啟用服務,就能支援執行 systemd 使用者服務。

從 Linux 10.5 的 Tableau Server 升級

如果要從 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 才能運作。

  • 如果 -session optional pam_systemd.so 存在 PAM 組態中,使用者服務無法啟動,且錯誤訊息 $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