Supervisor: Pourquoi n'arrive-t-il pas à définir une variable d'environnement en utilisant la valeur d'une autre variable d'environnement ?

Créé le 16 juin 2014  ·  3Commentaires  ·  Source: Supervisor/supervisor

J'essaie de définir une variable d'environnement dans ma configuration de superviseur en utilisant la valeur d'une variable d'environnement existante. La variable existante est REDIS_PORT_6379_TCP_ADDR (provient d'un conteneur lié Docker) ; la valeur est une adresse IP (par exemple 172.17.0.5 ). C'était ma première tentative naïve:

[program:sidekiq]
user=web
directory=/var/www
environment=REDIS_URL=redis://$REDIS_PORT_6379_TCP_ADDR:6379/0
command=bundle exec sidekiq -c 50
redirect_stderr=true
autorestart=true

Ce qui ne fonctionne pas du tout car superviseurd ne peut pas l'analyser :

$ supervisord -c /etc/supervisor/supervisord.conf -n
Error: Unexpected end of key/value pairs
For help, use /usr/bin/supervisord -h

Ensuite, j'ai essayé de citer la section environnement:

environment=REDIS_URL="redis://$REDIS_PORT_6379_TCP_ADDR:6379/0"

Cela n'a pas fonctionné car la variable n'a pas été interpolée avant d'être transmise à mon programme :

2014-06-16T03:08:35Z 240 TID-oqy09ga9c WARN: the scheme redis does not accept registry part: $REDIS_PORT_6379_TCP_ADDR:6379 (or bad hostname?)

Ensuite, selon cette réponse StackOverflow , j'ai essayé d'utiliser la syntaxe %(ENV) :

environment=REDIS_URL="redis://%(ENV_REDIS_PORT_6379_TCP_ADDR):6379/0"

Encore une fois, il ne peut pas l'analyser:

$ supervisord -c /etc/supervisor/supervisord.conf -n                              
Error: Format string 'REDIS_URL="redis://%(ENV_REDIS_PORT_6379_TCP_ADDR):6379/0"' for 'environment' is badly formatted
For help, use /usr/bin/supervisord -h

Même résultat si je supprime les guillemets :

$ supervisord -c /etc/supervisor/supervisord.conf -n
Error: Format string 'REDIS_URL=redis://%(ENV_REDIS_PORT_6379_TCP_ADDR):6379/0' for 'environment' is badly formatted
For help, use /usr/bin/supervisord -h

J'ai essayé les mêmes choses en mettant export dans la section command :

[program:sidekiq]
user=web
directory=/var/www
command="export REDIS_URL=redis://$REDIS_PORT_6379_TCP_ADDR:6379/0; bundle exec sidekiq -c 50"
redirect_stderr=true
autorestart=true

Résultat:

$ supervisord -c /etc/supervisor/supervisord.conf -n
2014-06-16 03:35:00,170 WARN Included extra file "/etc/supervisor/conf.d/sidekiq.conf" during parsing
2014-06-16 03:35:00,193 INFO RPC interface 'supervisor' initialized
2014-06-16 03:35:00,194 INFO supervisord started with pid 346
2014-06-16 03:35:01,197 INFO spawnerr: can't find command 'export REDIS_URL=redis://$REDIS_PORT_6379_TCP_ADDR:6379/0; bundle exec sidekiq -c 50'
[program:sidekiq]
user=web
directory=/var/www
command="export REDIS_URL=redis://%(ENV_REDIS_PORT_6379_TCP_ADDR):6379/0; bundle exec sidekiq -c 50"
redirect_stderr=true
autorestart=true

Résultat:

$ supervisord -c /etc/supervisor/supervisord.conf -n                              
Error: Format string '"export REDIS_URL=redis://%(ENV_REDIS_PORT_6379_TCP_ADDR):6379/0; bundle exec sidekiq -c 50"' for 'command' is badly formatted
For help, use /usr/bin/supervisord -h

Qu'est-ce que je fais mal?

je suis en 3.0b2 :

$supervisord --version
3.0b2

Commentaire le plus utile

3.2 n'existait pas encore quand j'ai écrit ceci il y a plus de 4 ans 🙄

Le jeu. 18 octobre 2018 à 01:49 Dumitrescu Robert [email protected]
a écrit:

Vous utilisez la mauvaise version. Cette syntaxe est correctement prise en charge par
superviseur 3.2.


Vous recevez ceci parce que vous avez modifié l'état d'ouverture/fermeture.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/Supervisor/supervisor/issues/447#issuecomment-430894666 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAJXc_Y0Zd4ykEzNc7eH4CZhz09RTVLNks5umCRhgaJpZM4CEaUX
.

Tous les 3 commentaires

Je suppose que mes faibles capacités en Python se manifestent. J'avais besoin d'ajouter un s à la fin de %() pour formater la valeur sous forme de chaîne. Cette config fonctionne, enfin :

[program:sidekiq]
user=web
directory=/var/www
environment=REDIS_URL=redis://%(ENV_REDIS_PORT_6379_TCP_ADDR)s:6379/0
command=bundle exec sidekiq -c 50
redirect_stderr=true
autorestart=true

Vous utilisez la mauvaise version. Cette syntaxe est correctement prise en charge par le superviseur 3.2.

3.2 n'existait pas encore quand j'ai écrit ceci il y a plus de 4 ans 🙄

Le jeu. 18 octobre 2018 à 01:49 Dumitrescu Robert [email protected]
a écrit:

Vous utilisez la mauvaise version. Cette syntaxe est correctement prise en charge par
superviseur 3.2.


Vous recevez ceci parce que vous avez modifié l'état d'ouverture/fermeture.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/Supervisor/supervisor/issues/447#issuecomment-430894666 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAJXc_Y0Zd4ykEzNc7eH4CZhz09RTVLNks5umCRhgaJpZM4CEaUX
.

Cette page vous a été utile?
0 / 5 - 0 notes