Systemd

為什麼 /etc/environment 不適用於 systemd 服務

  • May 2, 2020

我設置了我PATH的 in /etc/environment,當我以任何使用者身份登錄時它可以工作,但是當我以任何使用者身份執行我的服務時,它不尊重我的/etc/environment.

是什麼賦予了?

當使用者登錄時,會呼叫 PAM 庫,並且通常會呼叫 PAM 配置pam_env.so來為使用者設置環境。此設置包括閱讀/etc/environment

在傳統的 SysVinit 服務啟動腳本中,您可能會使用su以非 root 使用者身份啟動服務;su還會呼叫 PAM 庫,因此會讀取/etc/environment,就像普通使用者登錄一樣。

systemd設計也適用於可能根本不存在 PAM 庫的嵌入式系統。因此,如果將 systemd 服務配置為以非 root 使用者身份執行,systemd則將處理環境初始化而不依賴任何外部庫。

有關可以在服務文件中用於調整服務環境的設置,請參見手冊頁的ENVIRONMENT段落。systemd.exec(5)提供的預設值systemd非常小,因此您應該明確初始化您的服務需要什麼(這通常是一個好習慣)。

例如,您可以簡單地添加

EnvironmentFile=/etc/environment

進入您的服務定義。

但是,如果您的服務只需要啟動其他一些事情,那麼在某些配置文件中將它們顯式指定為絕對路徑名可能會更可靠,而不是依賴於PATH可能因與您的服務無關的原因而被修改的路徑名,這可能會導致令人討厭的驚喜。

引用自:https://unix.stackexchange.com/questions/584080