如何从文件中为 upstart 作业加载环境变量?

如何从文件中为 upstart 作业加载环境变量?

我正在为使用环境变量配置的服务编写一个 upstart 作业,其中有很多(> 20)。

到目前为止,处理这个问题的方式通常是从 Ruby 启动器运行它,该启动器使用 Ruby 的 Dotenv gem 来加载配置文件。我想用一个简单的 upstart 文件替换启动器(以减少我需要维护的自定义代码量),但我遇到了如何设置服务所需的所有环境变量的问题。

我最初的想法是:

script
   . /etc/default/service-conf
   /usr/local/bin/service
end script

但是仅仅获取文件并不会导出变量,而且我不想export在脚本中添加太多命令,主要是因为它将完全无法维护和难以阅读的混乱。

答案1

有几种方法可以解决导出源文件中定义的变量的问题,包括各种 hack(例如,奇怪的export $(cat file | xargs)hack记录在这个答案中),但最简单的方法是在获取环境文件之前,在 shell 中启用“标记要导出的变量”标志。

这是此功能的 bash 文档 - 请参阅-a

虽然scriptupstart 中的标签不使用 Bash 作为 shell - 它使用 Ubuntu 中默认的 POSIX shell 实现,称为短跑它也支持这个功能,并调用它allexport。因此 upstart 脚本部分应为:

script
  set -a
  . /etc/default/service-conf
  /usr/local/bin/service
end script

相关内容