执行前加载环境变量

时间:2012-08-05 09:44:32

标签: environment-variables supervisord

我打算在环境变量中存储一些应用程序设置,例如MYSQL_URL = mysql:// ...我使用supervisord来管理应用程序进程。如何在子进程启动之前加载环境变量?特别是当这些设置被更改时,我希望重新启动子进程将加载新设置。

此外,我想知道在哪里存储这些环境变量。我可以“导出$(cat filename)”的文件?或者一些更好的方法。我很好奇Heroku如何管理它的环境变量。

2 个答案:

答案 0 :(得分:20)

您可以在[program:x]部分的supervisord配置中设置每进程环境变量,这些变量将在启动时传递给进程:

[program:yourprocess]
# ... other settings
environment =
    MYSQL_URL=mysql://,
    OTHER_VAR="some other value"

请注意,您需要在每个变量之间使用逗号。我在上面的例子中也使用了换行符,这些都是可选的。如果环境值中包含空格,则需要将值括在引号中。

您还可以使用相同的格式为[supervisord]部分中的所有进程设置环境变量。

最后但并非最不重要的是,当supervisord启动时设置的任何环境变量也会传递给由supervisord管理的进程。有关详细信息,请参阅documentation section on environment variables

请注意,如果更改配置文件中配置的环境变量,则需要向supervisord发送信号以重新加载配置并重新启动子进程以便它们获取这些更改:

supervisorctl update
supervisorctl restart yourprocess

如果你改变了supervisord之外的环境变量,你需要一起关闭supervisord来挑选这些变量:

supervisorctl shutdown
supervisord

答案 1 :(得分:0)

根据the docs,“supervisord.conf包含一个名为[supervisord的部分,其中可以设置全局设置”,例如environmont变量。 (在链接页面上,搜索“环境”一词)。

环境变量也可以是set an a per-program basis