systemd 博客包含两篇建议不要使用 /etc/sysconfig 或 /etc/default 的文章:
- http://0pointer.de/blog/projects/on-etc-sysinit.html
- http://0pointer.de/blog/projects/the-new-configuration-files.html
有哪些替代方法可以为 systemd 单元文件配置系统特定选项?
我考虑过的选项:
- 相反,创建一个模板单元并使用说明符
缺点是每次启动服务时都需要指定该选项。这主要用于运行单个服务的多个副本,因此它并不真正适用。
- 使用目录覆盖
Execstart
本地单元文件unitd.d
这里的缺点是这需要覆盖整个Execstart
.它不能用于简单地指定单个选项。
答案1
这在一定程度上取决于您尝试配置的选项。如果它是一个文件夹位置(如主目录、运行时目录等),systemd 通过变量提供它。
否则,您可以使用环境文件来指定选项,然后让服务单元将变量包含在这些文件中。例如,服务文件将包含以下内容(除了常用参数之外):
[Service]
Environment=ENV_OPTION_1=0 ENV_OPTION_2=linux
EnvironmentFile=/etc/default/program-name
ExecStart=/usr/bin/program $ENV_OPTION_1 ${ENV_OPTION_2}
EnvironmentFile
指向一个包含键值对的简单文件,如下所示:
ENV_OPTION_1=8913
ENV_OPTION_2=ubuntu
Environment
是您可能想要的默认选项。
然后使用环境值,ExecStart
如上所示。请注意,如果值可能以空格分隔,则需要使用语法${}
。
答案2
正如我在其他地方(qv)所说的那样,systemd 人们希望您使用片段.conf
文件,并认为EnvironmentFile
这是一个坏主意,并且它的使用是一个错误。
您甚至可以有多个片段文件:
# wibble.service.d/execstart.conf
[服务]
ExecStart=
ExecStart=/usr/local/bin/wibble $OPTIONS0 $OPTIONS1
# wibble.service.d/options0.conf
[服务]
环境=OPTIONS0=--wobble
# wibble.service.d/options1.conf
[服务]
环境=OPTIONS1=--wubble