创建 debian 包时放置 systemd 服务 EnvironmentFile 的位置

Wim*_*eka 5 filesystem files environment systemd 16.04

我目前正在重写upstart要使用的作业systemd,我想知道:

的“默认”位置在EnvironmentFile哪里?

它可能会进入 /etc/environment

这可能是与所有的其他服务文件/etc/systemd/service/run/systemd/system/lib/systemd/system但我没有看到任何其他EnvironmentFile在这些位置的任何其他s Service

我也辩论过/etc/default//etc/<PACKAGE_NAME>

没有记录在案的“常规”位置可以放置它。我见过的许多示例似乎都在使用/tmp/<FILE_NAME>,这/tmp在重新启动时被擦除是没有意义的,并且这些文件需要保留,以便在Service启动或重新启动时可以引用它们。


背景:我EnvironmentFile在安装 debian 软件包之前生成预安装时间(使用维护者脚本),并且我知道每次启动/重新启动服务时该文件都必须可用。

Wim*_*eka 5

其他人在 Unix & Linux Stack Exchange站点回答了这个问题。

(摘录如下)


systemd 人员不喜欢环境文件。

所以没有一个。

多年来,有几位 systemd 人员记录在案,他们说环境文件是一种他们不应该首先提供给 systemd 的机制。

原生 systemd 机制毕竟是服务单元文件本身,其中环境变量是通过Environment=键设置的。在他们看来,使用管理员定义的或特定于机器的变量自定义服务的环境是将代码片段.conf文件放入单元的问题,这些文件使用更多Environment=键设置其他环境变量。

(但老实说,尝试将内容动态转换为适合EnvironmentFile=. [...]的文件确实没有意义。[...]也是/etc/sysconfig一种应该真正消失的 Redhatism,整个概念是有缺陷的。添加一个新的/run/sysconfig/肯定会使情况变得更糟。 )

我可能一开始就不应该添加EnvironmentFile=。打包者误解了单元文件受管理配置的约束,应该这样对待,并且将单元文件的配置拆分为单独的文件EnvironmentFiles=是一种真正没有意义的不必要间接游戏。
— Lennart Poettering (2015-12-09)。关于“EnvironmentFile”的查询。系统开发。

使用EnvironmentFile=是几乎总是一个坏主意,我们也许不应该补充说,因为它邀请打包重新引入/etc/default//etc/sysconfig/我们尝试删除疯狂。
— Lennart Poettering (2015-07-22)。请考虑为整个单元文件设置变量。systemd 错误 #618。GitHub。

奖金内容

在 daemontools 世界中,我们当然有环境目录,使用envdir/s6-envdir命令读取。尽管它不是 daemontools 的标准或要求,但人们可以使用的与某些工具一致的约定是,环境目录已命名env并与run程序和其他内容一起位于服务目录中。