Подтвердить что ты не робот

Программа супервизора: расширение команды x переменных среды $(ENV_VAR) s?

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

Следующий синтаксис для меня не работает на supervisor-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) s:

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

Команда:

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

Представлено: 3.0

по теме:

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

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

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

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

4b9b3361

Ответ 1

Я согласен, что надзорный орган не знает об этом (по крайней мере, мне).

Я нашел самое легкое решение для выполнения /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 

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