Supervisor: Команда не получает изменения в переменной среды PATH - PullRequest
0 голосов
/ 25 марта 2019

У меня есть приложение django, в котором все пакеты установлены с использованием virtualenv.На сервере я использую nginx, supervisor и gunicorn для обслуживания приложения.Ниже приведен мой конфигурационный файл супервизора для gunicorn

[program:gunicorn]
directory = /home/ubuntu/django_app/django_app/
environment = PATH="/home/ubuntu/django_app/django_app/envproj/bin:%(ENV_PATH)s",NEW_RELIC_ENVIRONMENT=production
command = newrelic-admin run-program gunicorn main.wsgi -b 127.0.0.1:8000 -w 5 --max-requests 1000
autostart = true
autorestart = true
user = ubuntu
redirect_stderr = True
stdout_logfile = /logs/logs/supervisord/%(program_name)s.log
stopwaitsecs = 10
priority = 1

, когда я запускаю приложение с помощью supervisord, и происходит сбой со следующей ошибкой:

'newrelic-admin' command not found

Из этой ошибки я сделал вывод, что мой PATHПеременная не установлена ​​правильно, так как вышеприведенные команды будут работать только при активации virtualenv.Чтобы проверить, я написал другую конфигурацию со следующими значениями:

[program:dummy]
directory = /home/ubuntu
environment = PATH="/home/ubuntu/django_app/django_app/envproj/bin:%(ENV_PATH)s",NEW_RELIC_ENVIRONMENT=production
command = python printenv.py
autostart = true
autorestart = true
user = ubuntu
redirect_stderr = True
stdout_logfile = /logs/logs/supervisord/%(program_name)s.log
stopwaitsecs = 10
priority = 1

И мой printenv.py содержит следующее:

import os, sys, time
sys.stdout.write(repr(os.getenv('PATH')))
sys.stdout.write(repr(os.getenv('NEW_RELIC_ENVIRONMENT')))
sys.stdout.flush()
time.sleep(10) # wait at least startsecs

При обновлении и перезапуске супервизора и затем выполнении supervisorctl tail dummy чтобы просмотреть журналы для проверки значения переменной PATH, я получаю следующее:

'/home/ubuntu/django_app/django_app/envproj/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin''staging'

Как можно видеть, переменная пути обновляется в соответствии с местоположением местоположения virtualenv, которое яуказал в переменной среды.Таким образом, я не понимаю, почему эта ошибка произошла в соответствии с прежним конфигом.Пожалуйста, помогите

`newrelic-admin` command not found
...