2013-12-02 3 views
27

Я хотел бы поместить конфигурацию (в данном случае, имя сайта) в супервизор переменных окружения, для расширения в программе: аргументы команды x. Поддерживается ли это? В формулировке документации, по-видимому, указывается «да».

следующий синтаксис не работает для меня на контролером-3.0 (отрывок из конфигурационного файла):

[supervisord] 
environment = SITE="mysite" 

[program:service_name] 
command=/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d 
process_name=%(program_name)s_%(process_num)03d 
numprocs=5 
numprocs_start=1 

воскрешает следующее сообщение об ошибке:

sudo supervisord -c supervisord.conf            

Error: Format string 
'/path/to/myprog/myservice /data/myprog/%(ENV_SITE)s/%(ENV_SITE)s.db %(program_name)s_%(process_num)03d' 
for 'command' contains names which cannot be expanded 

Чтение документации, я ожидал, переменные окружения должен быть доступен для расширение в программе: команда x как% (ENV_VAR) с:

http://supervisord.org/configuration.html#program-x-section-values

Команда:

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

Введенные: 3,0

Связанные:

Есть открытые запросы тянуть, чтобы включить расширение в дополнительных значениях раздела:

https://github.com/Supervisor/supervisor/issues?labels=expansions&page=1&state=open

Поиск по Гулу (или SO) не возвращает никаких примеров попыток использования% (ENV_VAR) s расширение в значении командной строки:

https://www.google.com/search?q=supervisord+environment+expansion+in+command

ответ

3

Я согласен, что руководитель не знает об этом (по крайней мере, для меня).

Я нашел самое легкое решение для выполнения/bin/bash -c. В вашем случае это будет:

command=/bin/bash -c"/path/to/myprog/myservice /data/myprog/${SITE}/${SITE}.db ..." 

Что вы думаете?

Я нашел вдохновение здесь: http://blog.trifork.com/2014/03/11/using-supervisor-with-docker-to-manage-processes-supporting-image-inheritance/

2

Вы делаете это правильно; однако, ENV, определенная в разделе вашего супервизора, не становится доступной для процессов по какой-либо причине во время загрузки конфигурации. Если вы начнете супервизор, выполните следующие действия:

SITE=mysite supervisord 

Он будет работать правильно и развернуть эту переменную. Я не знаю, почему у супервизора есть проблемы с добавлением в среду и предоставление возможности для расширения конфигурации подпроцессов. Я думаю, что переменная среды доступна внутри подпроцесса, но не при расширении переменных в объявлении конфигурации подпроцесса.

Смежные вопросы