我打算在环境变量中存储一些应用程序设置,例如MYSQL_URL = mysql:// ...我使用supervisord来管理应用程序进程。如何在子进程启动之前加载环境变量?特别是当这些设置被更改时,我希望重新启动子进程将加载新设置。
此外,我想知道在哪里存储这些环境变量。我可以“导出$(cat filename)”的文件?或者一些更好的方法。我很好奇Heroku如何管理它的环境变量。
答案 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。