Программа супервизора: расширение команды 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
Ответы
Ответ 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
Он будет корректно работать и расширять эту переменную. Я не знаю, почему у супервизора есть проблемы с добавлением в среду и предоставление возможности для расширения конфигурации подпроцессов. Я думаю, что переменная окружения доступна внутри подпроцесса, но не при расширении переменных в объявлении конфигурации подпроцесса.