我正在为使用环境变量配置的服务编写一个 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 中启用“标记要导出的变量”标志。
虽然script
upstart 中的标签不使用 Bash 作为 shell - 它使用 Ubuntu 中默认的 POSIX shell 实现,称为短跑它也支持这个功能,并调用它allexport
。因此 upstart 脚本部分应为:
script
set -a
. /etc/default/service-conf
/usr/local/bin/service
end script