2012-08-05 101 views
8

我打算在環境變量中存儲一些應用程序設置,例如MYSQL_URL = mysql:// ...我使用supervisord來管理應用程序進程。如何在子進程啓動之前加載環境變量?特別是當這些設置被改變時,我希望重新啓動子進程將加載新的設置。執行前加載環境變量

另外我想知道在哪裏存儲這些環境變量。我可以「導出$(貓文件名)」的文件?或者一些更好的方法。我很好奇Heroku如何管理它的環境變量。

回答

19

您可以在[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 
+3

失敗的目的,如果你還保存在版本控制你的上司的配置文件 – Dustin 2014-08-29 22:16:06

+1

@Dustin爲r飛行。有沒有解決的辦法?也許某種包含文件? – surjikal 2014-12-18 07:55:03

+0

@surjikal:使用buildout等工具生成配置文件。 – 2014-12-18 08:10:18

0

the docs了「supervisord.conf包含一個名爲[supervisord在全局設置部分」,如environmont變量,可以設置。 (在鏈接頁面上,搜索單詞「環境」)。

環境變量也可以是set an a per-program basis

當它開始