进一步阅读

进一步阅读

systemd 博客包含两篇建议不要使用 /etc/sysconfig 或 /etc/default 的文章:

有哪些替代方法可以为 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

进一步阅读

相关内容