为什么 /etc/environment 不适用于 systemd 服务

为什么 /etc/environment 不适用于 systemd 服务

我已经设置了我的PATHin /etc/environment,当我以任何用户身份登录时它可以工作,但是当我以任何用户身份运行我的服务时,它不尊重我的/etc/environment.
是什么赋予了?

答案1

当用户登录时,将调用 PAM 库,并且通常会调用 PAM 配置pam_env.so来为用户设置环境。此设置包括阅读/etc/environment

在传统的 SysVinit 服务启动脚本中,您可能会以su非 root 用户身份启动服务;su还会调用 PAM 库,因此会读取/etc/environment,就像常规用户登录一样。

systemd其设计也适用于可能根本不存在 PAM 库的嵌入式系统。因此,如果将 systemd 服务配置为以非 root 用户身份运行,systemd则将在不依赖任何外部库的情况下处理环境初始化。

请参阅ENVIRONMENTsystemd.exec(5)手册页的段落您可以在服务文件中使用设置来调整服务的环境。提供的默认值systemd非常少,因此您应该明确初始化您的服务所需的内容(这通常是一个很好的做法)。

例如,您可以简单地添加

EnvironmentFile=/etc/environment

进入您的服务定义。

但是,如果您的服务只需要启动其他一些东西,那么在某些配置文件中将它们显式指定为绝对路径名可能会更安全,而不是依赖于PATH可能因与您的服务无关的原因而被修改的路径名,从而可能导致令人讨厌的惊喜。

相关内容