【问题标题】:Load environment variable before executing执行前加载环境变量
【发布时间】:2012-08-02 15:57:55
【问题描述】:

我打算在环境变量中存储一些应用设置,比如MYSQL_URL=mysql://...我使用supervisord来管理应用进程。子进程启动前如何加载环境变量?特别是当这些设置发生变化时,我希望重新启动子进程会加载新的设置。

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

【问题讨论】:

    标签: environment-variables supervisord


    【解决方案1】:

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

    【讨论】:

    • 如果您还将主管配置文件存储在版本控制中,则无法达到目的
    • @Dustin 是对的。有没有解决的办法?也许是某种包含文件?
    • @surjikal:使用 buildout 之类的工具生成配置文件。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2019-07-24
      相关资源
      最近更新 更多