переменные среды supervisord настройка приложения

Я запускаю приложение от supervisord, и мне нужно настроить для него среду. Существует около 30 переменных среды, которые необходимо установить. Я пробовал поставить все на один большой

окружающая среда=

line и это, похоже, не работает. Я также пробовал несколько линий enviroment=, и это, похоже, тоже не работает. Я также пробовал как с, так и без " вокруг значения env.

каков наилучший способ настроить мою среду так, чтобы она остается нетронутым под контролем супервизора? Должен ли я вызывать свою фактическую программу (tornado, fwiw) из сценария оболочки с предварительно загруженной средой? В идеале я хотел бы поместить все переменные среды в файл include и загрузить их с помощью supervisor, но я открыт для этого другим способом.

обновление:

вот что я использую в файле conf:

environment=
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH,
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs,
    OBFS_API_ENVIRONMENT_STAGE=test,

Это продолжается около 30 линий с большим количеством переменных окружения. Когда я выполняю программа, она немедленно падает, жалуясь, что переменная среды OBFS_API_ENVRIONMENT_STAGE не установлена.

2 ответов


The relevant documentation section объясняет, что вам нужно перечислить переменные как пары ключ/значение, разделенные запятыми:

окружающая среда

список пар ключ / значение в форме ключ=val, KEY2=val2, который будет помещен в среду процесса супервизора (и, как результат, во всех его дочерних средах процесса). Этот параметр может включать значение %(здесь) s, которое расширяется до каталога, в котором был найден файл конфигурации супервизора. Отмечать эти подпроцессы наследуют переменные среды оболочки, используемые для запуска supervisord, за исключением переопределенных здесь и в строфе конфигурации среды программы.

The example for this section также использует запятые:

environment = KEY1=value1,KEY2=value2

внутренне это parsed into a dict использование python shlex лексер, поэтому он будет иметь дело с цитированием должным образом. Он также будет лишать пробелы, поэтому, чтобы сделать вещи более читаемыми, вы можно разделить вещи на несколько строк:

environment =
    KEY1="Some longer value containing whitespace",
    KEY2=value2-on-a-new-line,

обратите внимание, что конечная запятая является необязательной; это не будет иметь значения в выходных данных.

отсутствие запятой после KEY1, однако, может привести к странным значениям (приведенный выше пример, минус запятая после whitespace" даст вам {'KEY1': 'Some longer value containing whitespace', '=': ','} как среда dict), поскольку требование знака равенства не проверяется строго. Я подан запрос на вытягивание чтобы исправить это.


Как оказалось, конечная запятая является проблемой. Я процитировал все строки env и удалил конечную запятую. Теперь все работает.