Systemd
為什麼 /etc/environment 不適用於 systemd 服務
我設置了我
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
可能因與您的服務無關的原因而被修改的路徑名,這可能會導致令人討厭的驚喜。