2014-03-07 343 views
9

如何在supervisord命令中使用环境变量? 我想:如何在supervisord命令中使用环境变量

flower --broker=$MYVAR

,但它不工作(可变没有展开),所以我试图用一个内嵌python脚本:

command=python -c "import os;os.system('flower --broker={0}'.format(os.environ['MYVAR']))" 

上面的命令工作,但后来我'm无法使用supervisorctl stop终止进程......我得到“停止”回来,但进程实际上仍在运行! 我该如何解决我的问题? (我不希望把这个参数在线)

+0

除非supervisord中有内置的特殊支持;你需要一个shell或其他进程来扩展一个环境变量,例如'command = sh -c'flower --broker =“$ MYVAR”''' – jfs

+0

mmm ...为什么如果我运行“flower --broker = $ MYVAR”在壳中它的作用?! – daveoncode

+0

,因为* shell *正好扩展它 – jfs

回答

10

根据监事的文档,你可以通过在前面ENV_像访问命令环境变量:%(ENV_YOUR_VAR)s

http://supervisord.org/configuration.html#environment-variables

字符串表达式对包含键group_name,host_node_name,process_num,program_name,这里(supervisord配置文件的目录)和所有以WAR_为前缀的supervisord的环境变量的字典进行评估。

但是,根据此提交:https://github.com/Supervisor/supervisor/commit/2d6ca34582a8a07a5dd96ae45ef62cd58a459f4f此功能在版本3.2之后添加。

+0

请记住,最新的14.04包是'3.0b2',但这需要'3.2' –

0

我能够使用的系统环境变量监事命令是这样的:

command=php artisan queue:listen --env=%(ENV_APP_ENVIRONMENT)s

上面的命令将扩大到command=php artisan queue:listen --env=production如果APP_ENVIRONMENT环境变量production

注意:在Supervisor配置中,您必须在系统环境变量前添加ENV_,如文档here中所述。

相关问题