以 root 身份執行 systemctl –user 命令
我需要 root 才能管理
systemctl --user
單位。現在我已經
user1
設置了 systemd 使用者單元。如果使用者直接通過終端、GUI 或 SSH 登錄,他們可以執行所有systemctl --user
命令。當使用者仍然登錄時,我可以以 root 身份執行以下
systemctl --user
命令並在該使用者處執行所有命令而沒有問題:su - user1 -c "systemctl --user status myunit.service"
但是,如果使用者註銷,那麼任何人都不能
systemctl --user
以該使用者身份執行命令,甚至不能以 root 身份執行。我會繼續得到Failed to connect to bus: No such file or directory
即使我
sudo - user1
作為root,那還不夠好,也會得到同樣的錯誤。使用者實際上需要登錄才能管理該使用者的單位。顯然這是一個已知的“問題”(系統按設計執行時引用)。
**注意:**我嘗試在’s中設置
XDG_RUNTIME_DIR
環境變數,但這沒有幫助。user1``bashrc
另一個使用者似乎找到了解決方法,但它不起作用。看起來開發商不贊成他的想法。
我發現的唯一解決方法是在使用公鑰進行身份驗證後通過 ssh 進入使用者帳戶以執行這樣的命令:
ssh user1@localhost -f 'systemctl --user status myunit.service'
我正在尋找一種不需要 SSH 連接的解決方法。我需要 root 才能在該使用者未登錄時管理 systemd 使用者單元。我怎樣才能做到這一點?
我實際上想出了一種非常乾淨的方法,它不涉及讓使用者實際登錄。需要為 root 使用者啟用帶有 loginctl 的 linger。
loginctl enable-linger user1
然後你可以檢查狀態
loginctl user-status user1
這應該列出使用者從他們的 systemd 程序執行的所有程序。現在我可以在沒有使用者實際登錄的情況下以 root 身份執行:
runuser -l user1 -c 'systemctl --user status myunit.service'
不要使用
su
orsudo
,而是使用machinectl
它會為您提供適當的使用者會話和上下文。您可以像以前那樣從
su
/中放入一個外殼sudo
:machinectl shell root@.host
…並在給定使用者的上下文中執行您想要執行的任何操作,或者您可以將要執行的 cmd 作為附加參數傳遞,例如:
machinectl shell root@.host $(which bash) -c "systemctl --user status myunit.service"
確保不要將 $(which bash) -c 嵌套在引號中。