在 systemd 初始化脚本中使用变量

在 systemd 初始化脚本中使用变量

我为 SysVinit 和 systemd 创建了初始化脚本,以便与我们的软件包之一一起分发(它应该为网络服务运行一个非交互式后台守护进程)。安装程序询问用户是否要安装该服务;如果是这样,则创建守护程序的用户和主目录,并将正确的脚本(取决于进程 1 的映像名称)复制到正确的位置。

由于一些细节取决于用户的特定配置或公司策略(在哪里安装我们的工具?守护进程用户应该被称为什么?他的主目录应该在哪里?),我使用了诸如 之类的占位符%%TOOL_USER%%,并且我的安装脚本通过 sed 替换了那些。自动的东西适用于 CentOS 和 Debian,所以我已经很高兴了。

但当然每个系统都有点不同,因此客户可能会选择手动安装服务(例如,如果他不使用系统日志,或者通常具有较高的安全级别,我们的一些客户就是这种情况)。在这种情况下,他需要调整初始化脚本。

如果是系统初始化这很简单,因为它基本上是一个 shell 脚本,我只输入了三个变量

user=%%TOOL_USER%%
executable=%%TOOL_EXEC%%
working_dir=%%TOOL_HOME%%

在顶部,以及一些配置提示。

另一方面,对于 systemd,我没有找到设置和引用自定义变量的可能性,所以我所能做的就是指示用户将所有出现的 替换%%TOOL_*%%为适当的值。虽然我通常喜欢新的 systemd 脚本的工作方式,我更喜欢一种更安全的方法,就像我的初始化脚本一样;现在用户可能会错过某个事件。我可能错过了什么吗?

作为参考,我查看了freedesktop.org systemd.service 文档

答案1

您可以使用来声明存储环境变量的文件(EnvironmentFile=参见 ) 。 man systemd.execEnvironmentFile 可以是您的工具基于变量生成的文件,其中文件systemd可以是手动管理的文件。

设置环境变量后,您的应用程序需要能够做出适当的响应。

相关内容