переменные среды 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 и удалил конечную запятую. Теперь все работает.