将环境变量从azure应用程序服务传递给Supervisord子流程

将环境变量从azure应用程序服务传递给Supervisord子流程,azure,subprocess,azure-web-app-service,celery,supervisord,Azure,Subprocess,Azure Web App Service,Celery,Supervisord,我想将环境变量传递给我的supervisord子流程,但该变量不会出现在子流程的可用名称中。主要问题是因为我的azure应用程序服务是动态构建的,所以我无法显式定义变量,但必须使用env var$app_路径。我想知道如何将其传递给主管子流程环境。这里是我的配置文件 supervisord.conf [unix_http_server] file=/var/run/supervisor.sock ; path to your socket file chmod=0700 [supervis

我想将环境变量传递给我的supervisord子流程,但该变量不会出现在子流程的可用名称中。主要问题是因为我的azure应用程序服务是动态构建的,所以我无法显式定义变量,但必须使用env var$app_路径。我想知道如何将其传递给主管子流程环境。这里是我的配置文件

supervisord.conf

[unix_http_server]
file=/var/run/supervisor.sock   ; path to your socket file
chmod=0700

[supervisord]
command=env
logfile=/home/LogFiles/supervisord/supervisord.log ; supervisord log file
logfile_maxbytes=50MB       ; maximum size of logfile before rotation
logfile_backups=10          ; number of backed up logfiles
loglevel=info               ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid ; pidfile location
nodaemon=false              ; run supervisord as a daemon
minfds=1024                 ; number of startup file descriptors
minprocs=200                ; number of process descriptors
user=root                   ; default user
childlogdir=/home/LogFiles/supervisord/            ; where child log files will live


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use unix:// schem for a unix sockets.


[include]
files=etc/supervisor/conf.d/celeryd.conf
celerybeat.conf

[program:celerybeat]
environment=APP_PATH=$APP_PATH
; Set full path to celery program if using virtualenv
command=%(ENV_APP_PATH)s/antenv/bin/celery -A kinduwa beat --loglevel=INFO
;command=celery -A kinduwa beat -loglevel=INFO

; remove the -A myapp argument if you aren't using an app instance
user=nobody
numprocs=1
stdout_logfile=/home/LogFiles/beat.out.log
; stdout_logfile= /var/log/celery/beat.log
stderr_logfile=/home/LogFiles/beat.err.log
; stderr_logfile= /var/log/celery/beat.log
autostart=true
autorestart=true
startsecs=10

; Causes supervisor to send the termination signal (SIGTERM) to the whole process group.
stopasgroup=true

; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=999
芹菜属

[program:celery]
environment=APP_PATH=$APP_PATH
user=nobody
numprocs=1
stdout_logfile=/home/LogFiles/celery/worker.out.log
; stdout_logfile=/var/log/celery/worker.log
stderr_logfile=/home/LogFiles/celery/worker.err.log 
; stderr_logfile=/var/log/celery/worker.log
autostart=true
autorestart=true
startsecs=10

; Set full path to celery program if using virtualenv
;command=celery -A proj worker --loglevel=INFO
;command=celery -A kinduwa worker --loglevel=INFO

; Alternatively,

;command=celery --app=your_app.celery:app worker --loglevel=INFO -n worker.%%h
command=%(ENV_APP_PATH)s/antenv/bin/celery -A kinduwa worker --loglevel=INFO 
;command=celery -A kinduwa worker --loglevel=INFO

; Or run a script
;command=celery.sh

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; Causes supervisor to send the termination signal (SIGTERM) to the whole process group.
stopasgroup=true

; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000
以下是我的启动脚本,以供参考

apt-get update
apt-get install -y supervisor

mkdir /var/run/celery/
mkdir /var/lib/celery/
mkdir /var/log/celery/

# adding and starting custom supervisor config
cp kdw_supervisord/kdw_supervisord.conf /etc/supervisor/
supervisorctl -c /etc/supervisor/kdw_supervisord.conf

service supervisor stop
service supervisor start


# adding in celery beat and worker configs
cp kdw_supervisord/kdw_celerybeat.conf /etc/supervisor/conf.d/
cp kdw_supervisord/kdw_celeryd.conf /etc/supervisor/conf.d/

supervisorctl reread
supervisorctl update
supervisorctl start all

gunicorn --bind=0.0.0.0 --timeout 600 kinduwa.wsgi
尝试部署时出现的错误是

2021-05-17T15:43:18.125749054Z ERROR: CANT_REREAD: Format string '%(ENV_APP_PATH)s/antenv/bin/celery -A kinduwa beat --loglevel=INFO' for 'program:celerybeat.command' contains names ('ENV_APP_PATH') which cannot be expanded. Available names: ENV_LANG, ENV_LANGUAGE, ENV_LC_ADDRESS, ENV_LC_ALL, ENV_LC_COLLATE, ENV_LC_CTYPE, ENV_LC_IDENTIFICATION, ENV_LC_MEASUREMENT, ENV_LC_MESSAGES, ENV_LC_MONETARY, ENV_LC_NAME, ENV_LC_NUMERIC, ENV_LC_PAPER, ENV_LC_TELEPHONE, ENV_LC_TIME, ENV_PATH, ENV_PWD, ENV_TERM, group_name, here, host_node_name, process_num, program_name in section 'program:celerybeat' (file: '/etc/supervisor/conf.d/kdw_celerybeat.conf')
tl:dr;我有一个动态设置的$APP_PATH env_var要在supervisord子流程中使用,我该怎么做