gpt4 book ai didi

Supervisord - 在 supervisord.conf 中使用一个变量

转载 作者:行者123 更新时间:2023-12-04 04:34:21 41 4
gpt4 key购买 nike

移至使用 supervisod作为过程控制系统。

我有一个 并在我的 supervisord.conf 中重复 ENVIRONMENT 配置,为很多进程设置很多环境变量。我需要在一个地方定义它并重用它,以保持配置干燥和可维护。主管可以这样做吗?

编辑:非干配置示例

[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"

可以分享的内容: ENVIRONMENT , 日志的基本目录(每个应用程序只有结尾会改变),像 startsecs 这样的常见变量。等等

最佳答案

选项

通过从 supervisord 继承:

只要您使用 version 3.0a10或以上,可以在[supervisord] environment中设置环境变量并且他们将处于supervisord 管理下的所有流程的环境中。

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

使用从 Shell 继承的变量 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 脚本。但是你可以 source /etc/default/supervisor在 root 的 .bashrc 中并使用 sudo bash -c "supervisord .."或在调用 supervisord 之前获取它。

关于Supervisord - 在 supervisord.conf 中使用一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038511/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com