102 votes

Variables du superviseur et de l'environnement

Je ne sais vraiment pas comment faire fonctionner le superviseur avec des variables d'environnement.

Vous trouverez ci-dessous un extrait de la configuration.

[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

J'ai essayé ce qui suit :

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

Quand je lance le superviseur, j'obtiens

htNotificationService: ERROR (abnormal termination)

Je peux démarrer à partir du shell en définissant le chemin python, mais pas à partir du superviseur. Dans les journaux, j'obtiens une erreur qui dit qu'un import ne peut pas être trouvé. Ce problème serait résolu si le superviseur fonctionnait. J'ai même le chemin dans /etc/environnements ?

Pourquoi le superviseur ne fonctionnera pas ?

142voto

edibleEnergy Points 148

La référence à des variables env existantes se fait avec des %(ENV_VARNAME)s

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

Pour définir plusieurs variables d'environnement, il faut les séparer par des virgules.

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

Essayez :

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

43voto

Shankar Points 338

Dans votre fichier .conf, sous le bloc supervisord, vous pouvez ajouter toutes les paires clé=valeur de l'environnement comme suit

[supervisord]
environment=CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//",FLASK_CONFIG="TESTING"

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

Si vous ne voulez pas coder en dur les variables mais les tirer de l'environnement du système d'exploitation, l'étape 1 de votre bash est la suivante

Exportation de la variable env.

>> sudo export CELERY_BROKER_URL="amqp://guest:guest@127.0.0.1:5672//"

Recharge du Bash

>> . ~/.bashrc

Vérifier si les variables d'environnement sont correctement définies

>> env

Maintenant, modifiez le fichier conf pour lire - Nota : faites précéder vos variables env d'un 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

29voto

FuzzyAmi Points 341

Ceci fonctionne pour moi. notez les tabulations avant chaque ligne :

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

29voto

twiclo Points 329

Je sais que c'est vieux mais je me suis débattu avec ça pendant des heures et je voulais peut-être aider le prochain.

N'oubliez pas de recharger vos fichiers de configuration après avoir effectué des mises à jour.

supervisorctl reread
supervisorctl update

7voto

spicyramen Points 407

Si vous installez Supervisor à partir d'un paquet d'installation, vérifiez quelle version de Supervisor vous utilisez. À partir d'août 2016, vous obtiendrez 3.0b2 . Si c'est le cas, vous aurez besoin d'une version plus récente de supervisor. Vous pouvez l'obtenir en installant supervisor manuellement ou en utilisant le pip de Python. Assurez-vous que toutes les dépendances sont réunies, ainsi que la configuration de upstart afin que supervisord fonctionne comme un service et démarre au démarrage du système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X