Как использовать переменные окружения в командах supervisord

Как я могу использовать переменную среды в команде supervisord? Я старался:

flower --broker=$MYVAR

но это не работает (переменная не расширяется), поэтому я попытался использовать встроенный скрипт Python:

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

Приведенная выше команда работает, но затем я не могу завершить процесс с помощью supervisorctl stop ... Я снова «останавливаюсь», но процесс на самом деле все еще работает! Как я могу решить свою проблему? (Я не хочу вставлять этот параметр в строку)


person daveoncode    schedule 07.03.2014    source источник
comment
Если в supervisord не встроена специальная поддержка; вам нужна оболочка или другой процесс для расширения переменной среды, например, command=sh -c 'flower --broker="$MYVAR"'   -  person jfs    schedule 07.03.2014
comment
ммм... почему, если я запускаю flower --broker=$MYVAR в шелле, он работает?!   -  person daveoncode    schedule 07.03.2014
comment
потому что оболочка расширяет его   -  person jfs    schedule 07.03.2014
comment
точно ... так почему же не расширяется, когда супервизор запускает мою команду? :П   -  person daveoncode    schedule 07.03.2014
comment
вы можете запустить команду без создания оболочки, попробуйте subprocess.call(["echo", "$PATH"]) против subprocess.call("echo $PATH", shell=True)   -  person jfs    schedule 07.03.2014


Ответы (2)


Согласно документам Supervisor, вы можете получить доступ к переменным среды в команде, указав префикс ENV_, например: %(ENV_YOUR_VAR)s

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

Строковые выражения оцениваются по словарю, содержащему ключи имя_группы, имя_узла_узла, номер_процесса, имя_программы, здесь (каталог файла конфигурации супервизора) и все переменные среды супервизора с префиксом ENV_.

Однако согласно этой фиксации: https://github.com/Supervisor/supervisor/commit/2d6ca34582a8a07a5dd96ae54a452cdf45ef652 /a> эта функция была добавлена ​​после версии 3.2.

person robbyt    schedule 11.06.2015
comment
Имейте в виду, что последним пакетом в 14.04 является 3.0b2, но для этого требуется 3.2 - person Carson Ip; 01.12.2017
comment
также имейте в виду, что переменные, которые вы указываете с помощью environment=X="value", недоступны в самом файле конфигурации как %(ENV_X)s, а только для вашей команды, как env var $X. - person benzkji; 11.03.2021

Мне удалось использовать переменную системной среды в команде Supervisor следующим образом:

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

Приведенная выше команда расширится до command=php artisan queue:listen --env=production, если переменная среды APP_ENVIRONMENT равна production.

Примечание. В конфигурации супервизора вы должны добавить к системным переменным среды префикс ENV_, как указано в документации здесь.

person colinhoernig    schedule 06.11.2015