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
。