Подтвердить что ты не робот

Супервизор и переменные среды

Я действительно не знаю, как заставить супервизора работать с переменными среды.

Ниже приведен фрагмент конфигурации.

[program:htNotificationService]
priority=2
#autostart=true
#autorestart=true
directory=/home/ubuntu/workspace/htFrontEnd/heythat/htsite
command = /usr/bin/python htNotificationService.py -service
stdout_logfile=/var/log/heythat/htNotificationService.log
redirect_stderr=true
environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat
stopsignal=QUIT

Я пробовал следующее:

environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat
environment=PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat
environment=PATH=/home/ubuntu/workspace/htFrontEnd/heythat,PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat

Когда я запускаю диспетчер, я получаю

htNotificationService: ERROR (abnormal termination)

Я могу начать с оболочки, установив путь python, но не от супервизора. В журналах появляется ошибка, указывающая, что импорт не найден. Ну, это будет решено, если супервайзер будет работать. У меня даже есть путь в /etc/environment?

Почему супервизор не работает?

4b9b3361

Ответ 1

Ссылка на существующие env vars выполняется с помощью% (ENV_VARNAME) s

(см. https://github.com/Supervisor/supervisor/blob/master/supervisor/skel/sample.conf)

Установка нескольких переменных среды осуществляется путем их разделения запятыми

(см. http://supervisord.org/subprocess.html#subprocess-environment)

Try:

environment=PYTHONPATH=/opt/mypypath:%(ENV_PYTHONPATH)s,PATH=/opt/mypath:%(ENV_PATH)s

Ответ 2

В вашем .conf файле под блоком супервизора вы можете добавить все пары ключ-значение среды как таковые

[supervisord]
environment=CELERY_BROKER_URL="amqp://guest:[email protected]:5672//",FLASK_CONFIG="TESTING"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

Если вы не хотите жестко кодировать переменные, но хотите извлечь его из среды os, шаг 1 на bash

Экспорт env var

>> sudo export CELERY_BROKER_URL="amqp://guest:[email protected]:5672//"

Обновить bash

>> . ~/.bashrc

Проверьте правильность установки env vars

>> env

Теперь измените файл conf для чтения - Примечание: добавьте переменные env в ENV_

[supervisord]
environment=CELERY_BROKER_URL="%(ENV_CELERY_BROKER_URL)s",FLASK_CONFIG="%(ENV_FLASK_CONFIG)s"

[program:celeryd]
command=celery worker -A celery --loglevel=info -P gevent -c 1000

Ответ 3

это работает для меня. обратите внимание на вкладки перед каждой строкой:

environment=
    CLOUD_INSTANCE_NAME=media-server-xx-xx-xx-xx,
    CLOUD_APPLICATION=media-server,
    CLOUD_APP_COMPONENT=none,
    CLOUD_ZONE=a,
    CLOUD_REGION=b,
    CLOUD_PRIVATE_IP=none,
    CLOUD_PUBLIC_IP=xx.xx.xx.xx,
    CLOUD_PUBLIC_IPV6=xx.xx.xx.xx.xx.xx,
    CLOUD_PROVIDER=c

Ответ 4

Если вы устанавливаете супервизора из установщика пакетов, проверьте, какую версию Supervisor вы используете. По состоянию на август 2016 года вы получите 3.0b2. Если это так, вам понадобится более новая версия диспетчера. Вы можете получить его, установив диспетчер вручную или используя Python pip. Убедитесь, что все зависимости выполнены вместе с настройкой выскочки, чтобы супервизор работал как служба и запускался при загрузке системы.