我目前正在重写作业upstart
以供使用systemd
,我想知道:
“默认”位置在哪里EnvironmentFile
?
它可能会进入/etc/environment
它可能与 中的所有其他服务文件一起存在/etc/systemd/service
,/run/systemd/system
或者但我在这些位置中/lib/systemd/system
没有看到任何其他.EnvironmentFile
Service
我也争论过/etc/default/
或者/etc/<PACKAGE_NAME>
没有记录在案的“常规”位置来放置它。我见过的许多示例似乎/tmp/<FILE_NAME>
都没有意义,因为在重新启动时会被擦除,并且这些文件需要保留,以便在启动或重新启动/tmp
时可以引用它们。Service
背景:我在安装 debian 软件包之前在预安装时生成EnvironmentFile
(使用维护者脚本),并且我知道每次启动/重新启动服务时该文件都必须可用。
答案1
systemd 的人不喜欢环境文件。
所以没有一个。
多年来,一些 systemd 人员曾公开表示,环境文件是他们一开始就不应该提供给 systemd 的机制。
毕竟,本机 systemd 机制是服务单元文件本身,其中环境变量是通过Environment=
键设置的。在他们看来,使用管理员定义的或特定于计算机的变量自定义服务环境只需放入.conf
单元的片段文件,然后使用更多键设置其他环境变量Environment=
。
(但老实说,尝试将内容动态转换为适合EnvironmentFile=
.[…]还有/etc/sysconfig
一种真正应该消失的红帽主义,整个概念都是有缺陷的。添加新的/run/sysconfig/
肯定会使情况变得更糟。)
EnvironmentFile=
我可能一开始就不应该添加。打包者误解了单元文件受管理配置的约束,并且应该如此对待,并且将单元文件的配置拆分成单独的文件EnvironmentFiles=
是一种非常无意义的不必要的间接游戏。
— 伦纳特·珀特林 (2015-12-09)。关于“环境文件”的查询。 systemd-开发。
使用— 伦纳特·珀特林 (2015-07-22)。请考虑为整个单元文件添加变量。系统错误#618。 GitHub。EnvironmentFile=
几乎总是一个坏主意,我们可能永远不应该添加它,因为它会邀请打包者重新引入我们试图消除的疯狂/etc/default/
。/etc/sysconfig/
奖励内容
在 daemontools 世界中,我们有环境目录当然是用envdir
/s6-envdir
命令读取。尽管它不是 daemontools 的标准或要求,但习俗可以使用的与某些工具一致的方法是,环境目录被命名并与程序和其他内容env
一起位于服务目录中。run