如何在supervisord命令中使用环境变量

17 投票
2 回答
20698 浏览
提问于 2025-04-17 21:17

我该如何在supervisord命令中使用环境变量呢?

我试过这样写:

flower --broker=$MYVAR

但是这样不行(变量没有被展开),所以我尝试用一个内联的Python脚本:

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

上面的命令可以运行,但我无法通过 supervisorctl stop 来终止这个进程……我收到的反馈是“已停止”,但实际上进程还是在运行!我该如何解决这个问题?(我不想把那个参数写在命令里)

2 个回答

5

我可以在Supervisor的命令中使用系统环境变量,像这样:

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

上面的命令会变成 command=php artisan queue:listen --env=production,前提是 APP_ENVIRONMENT 这个环境变量的值是 production

注意:在Supervisor的配置中,你必须在系统环境变量前加上 ENV_,具体要求可以在文档中找到,链接在 这里

19

根据Supervisor的文档,你可以通过在命令前加上ENV_来访问环境变量,比如这样写:%(ENV_YOUR_VAR)s

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

字符串表达式会根据一个字典来计算,这个字典里包含了组名、主机节点名、进程编号、程序名、配置文件所在的目录,以及所有以ENV_开头的Supervisor环境变量。

不过,根据这个提交记录:https://github.com/Supervisor/supervisor/commit/2d6ca34582a8a07a5dd96ae45ef62cd58a459f4f,这个功能是在3.2版本之后才添加的。

撰写回答