Руководитель и переменные окружения


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

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

[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/сред?

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

4   51   2012-10-15 20:57:47

4 ответа:

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

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

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

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

попробуй:

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

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

[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

если вы не хотите жестко кодировать переменные, но хотите вытащить его из среды ОС, Шаг 1 на вашем bash

экспорт env var

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

Перезагрузить Баш

>> . ~/.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

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

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

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