如何在supervisord命令中使用环境变量
我该如何在supervisord命令中使用环境变量呢?
我试过这样写:
flower --broker=$MYVAR
但是这样不行(变量没有被展开),所以我尝试用一个内联的Python脚本:
command=python -c "import os;os.system('flower --broker={0}'.format(os.environ['MYVAR']))"
上面的命令可以运行,但我无法通过 supervisorctl stop
来终止这个进程……我收到的反馈是“已停止”,但实际上进程还是在运行!我该如何解决这个问题?(我不想把那个参数写在命令里)
2 个回答
我可以在Supervisor的命令中使用系统环境变量,像这样:
command=php artisan queue:listen --env=%(ENV_APP_ENVIRONMENT)s
上面的命令会变成 command=php artisan queue:listen --env=production
,前提是 APP_ENVIRONMENT
这个环境变量的值是 production
。
注意:在Supervisor的配置中,你必须在系统环境变量前加上 ENV_
,具体要求可以在文档中找到,链接在 这里。
根据Supervisor的文档,你可以通过在命令前加上ENV_来访问环境变量,比如这样写:%(ENV_YOUR_VAR)s
http://supervisord.org/configuration.html#environment-variables
字符串表达式会根据一个字典来计算,这个字典里包含了组名、主机节点名、进程编号、程序名、配置文件所在的目录,以及所有以ENV_开头的Supervisor环境变量。
不过,根据这个提交记录:https://github.com/Supervisor/supervisor/commit/2d6ca34582a8a07a5dd96ae45ef62cd58a459f4f,这个功能是在3.2版本之后才添加的。