Supervisord - 在supervisord.conf中使用变量INSIDE

时间:2015-12-02 08:58:48

标签: supervisord

转而使用supervisod作为过程控制系统。

我的supervisord.conf中有一个 LONG 并重复进行环境配置,为很多进程设置了很多环境变量。我需要在一个地方定义并重用它,以保持配置DRY和可维护。这是可能的主管和如何?

编辑:非干燥配置示例

var lines = s.Split(new[] { "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); // Split into line array
var subset = lines.SkipWhile(p => p != "headerb") // Get to the "headerb" line
                  .Skip(1)    // Get to the line after "headerb"
                  .TakeWhile(m => m != "headerc")  // Grab the lines in the block we need
                  .ToList();
var digits = Regex.Matches(string.Join(string.Empty, subset), "[0-9]+")
                 .Cast<Match>()
                 .Select(v => v.Value)
                 .ToList();

可以共享的内容:[program:node-app1] command=node /home/ubuntu/server/node-app1/app.js directory=/home/ubuntu/server/node-app1 autostart=true autorestart=true stderr_logfile=/home/ubuntu/supervisor/node_app1/err.log stdout_logfile=/home/ubuntu/supervisor/node_app1/out.log user=ubuntu priority=998 startretries=20 ENVIRONMENT=BROKER_URL="amqp://user:password@path.to.rabbit:5672", NODE_ENV=envName, MONGO_URL="mongodb://path.to.mongo:27017", BASE_PUBLIC_API="http:path.to.api", REDIS_URL="redis://path.to.redis:6379", BACKEND_URL="https://path.to.backend", CHARTS_URL="https://path.to.charts" [program:node-app2] command=node /home/ubuntu/server/node-app2/app.js directory=/home/ubuntu/server/node-app2 autostart=true autorestart=true stderr_logfile=/home/ubuntu/supervisor/node_app2/err.log stdout_logfile=/home/ubuntu/supervisor/node_app2/out.log user=ubuntu priority=20 startretries=20 ENVIRONMENT=BROKER_URL="amqp://user:password@path.to.rabbit:5672", NODE_ENV=envName, MONGO_URL="mongodb://path.to.mongo:27017", BASE_PUBLIC_API="http:path.to.api", REDIS_URL="redis://path.to.redis:6379", BACKEND_URL="https://path.to.backend", CHARTS_URL="https://path.to.charts" ,日志的基本目录(每个应用程序只会更改结尾),常见变量如startsecs。等

1 个答案:

答案 0 :(得分:2)

选项

通过supervisord继承:

只要您使用version 3.0a10或更高版本,就可以在[supervisord] environment中设置环境变量,并且它们将位于监督管理下的所有流程环境中。

[supervisord]
...
environment=FAVORITE_VENTURE="RUSTY",FAVORITE_COLOR="RED"

使用从Shell继承的Variables supervisord

Supervisord还有一个%(ENV_VARNAME)s expansion format用于解释环境变量,这些变量允许移动不同进程的变量名称。但是配置的环境部分没有添加%(ENV_)s机制可用的环境变量,因此有必要使用已经由shell设置的变量调用supervisord。

例如,如果您使用init脚本启动supervisord并且是基于debian的系统(即Ubuntu),那么您可以从/ etc / default / supervisor中的以下内容开始:

export SUPERVISOR_INCLUDES="main.conf test.conf"
export MAIN_RETRY_COUNT=2
export TEST_RETY_COUNT=1
MONGO_BASE="MONGO_URL=mongodb://path.to.mongo"
MAIN_MONGO_URL="${MONGO_BASE}:27017"
TEST_MONGO_URL="${MONGO_BASE}:27018"
export MAIN_ENV="${MAIN_MONGO_URL},OTHER_THING=\"Another thing with escaped quoting\""
export TEST_ENV=..

然后在配置中使用它们:

; supvervisord.conf
[includes]
files= %(here)s/subdir/other.conf %(ENV_SUPERVISOR_INCLUDES)s 

; main.conf
[group:main]
...
[program:mainbackend]
startretries=%(ENV_MAIN_RETRY_COUNT)s
environment=%(ENV_MAIN_ENV)s

如果用户可以直接sudo并直接调用supervisord,这种方法不能很好地工作,因为sudo既剥离了用户环境又没有运行传统的shell init脚本。但您可以在root的.bashrc source /etc/default/supervisor中使用sudo bash -c "supervisord .."或在调用supervisord之前获取它。