Супервизор, переопределяющий переменные среды

У меня есть приложение (развернутое в док-контейнере), управляемое через supervisord

Мой supervisord.conf выглядит так:

[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log
loglevel=INFO

[program:anjay]
priority=1
#USE SOME_CLI for different run configurations
command=/some/binary %(ENV_SOME_CLI)s
stdout_logfile=/dev/fd/1
stderr_logfile=/dev/fd/2
stdout_logfile_maxbytes=0
stderr_logfile_maxbytes=0
autostart=true
autorestart=false
stopsignal=INT
user=root

Я хочу иметь возможность перезапустить /some/binary с другими аргументами (управляемыми переменной env SOME_CLI)
Запуск приложения в первый раз работает отлично, аргументы расширяются. Например.:

export SOME_CLI=A
/some/binary A

Затем я хочу export новый SOME_CLI=B и ожидаю после перезапуска:

export SOME_CLI=B
/some/binary B

К сожалению, все еще есть

/some/binary A

Можно ли таким образом перезапустить сконфигурированное приложение с другими аргументами?
Если нет, то как добиться такой функциональности?

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

Поправьте меня если я ошибаюсь


person lakier    schedule 24.01.2018    source источник
comment
Первая вещь: НЕ запускайте супервизор внутри контейнера. Контейнеры предназначены для запуска одного приложения и только одного приложения. Это не виртуальная машина, это контейнер. Переменные среды считываются один раз и не обновляются до перезапуска процесса.   -  person Javier Buzzi    schedule 24.01.2018


Ответы (1)


Добавьте переменную окружения прямо в файл conf в разделе [program], например:

[program:anjay]
environment=ENV_SOME_CLI=your_value

Примените изменения, сообщив супервизору, что в этом файле есть изменение с помощью supervisorctl update.

person fernandezcuesta    schedule 25.01.2018
comment
Попробуйте еще раз не вызывать двоичный файл напрямую, а запустить сценарий оболочки, в котором присутствует фактическая команда и ссылка на переменную среды. - person fernandezcuesta; 25.01.2018