我已经设置了我的PATH
in /etc/environment
,当我以任何用户身份登录时它可以工作,但是当我以任何用户身份运行我的服务时,它不尊重我的/etc/environment
.
是什么赋予了?
答案1
当用户登录时,将调用 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
可能因与您的服务无关的原因而被修改的路径名,从而可能导致令人讨厌的惊喜。