J'ai un problème lors du déploiement de l'application Django avec Gunicorn et Supervisor. Bien que je puisse faire en sorte que Gunicorn serve mon application (en définissant PYTHONPATH correctement et en exécutant une commande appropriée, celle de Supervisord config), je ne peux pas demander à un superviseur de l'exécuter. Il ne veut tout simplement pas voir mon application. Je ne sais pas comment m'assurer que le fichier de configuration est correct.
Voici ce que dit supervisorctl:
# supervisorctl start myapp_live
myapp_live: ERROR (no such process)
Je l’utilise sous Ubuntu 10.04 avec la configuration suivante:
Fichier /home/myapp/live/deploy/supervisord_live.ini:
[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true
Dans /etc/supervisor/supervisord.conf, à la fin du fichier, il y a:
[include]
files = /etc/supervisor/conf.d/*.conf
et voici un lien symbolique vers mon fichier de configuration:
# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root 48 Dec 4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini
tout semble aller pour moi mais supervisorctl ne cesse de le dire myapp_live: ERROR (no such process)
. Une solution pour ça?
la source
reread
ouupdate
. Il s’est avéré que j’avais sauvegardé mes fichiers de configurationfoo.conf.py
plutôt que de lesfoo.conf
identifier.Réponses:
J'ai eu le même problème, un
fait le tour, mais je ne sais pas si c'est la réponse à votre question.
la source
/etc/init.d/supervisor restart
ne fonctionne pas quand l'arrêt manuel et le début font.ps aux | grep supervisor
, puissudo kill -HUP pid
La bonne réponse est que le superviseur vous demande de relire et de mettre à jour lorsque vous placez un nouveau fichier de configuration. Le redémarrage n'est pas la solution, car cela affectera d'autres services. Essayer:
la source
Assurez-vous que vos fichiers de configuration de superviseur se terminent par .conf
Il m'a fallu un certain temps pour comprendre celui-là. Espérons que cela aide la personne suivante.
la source
Le rechargement du processus de superviseur principal peut fonctionner, mais il aura des effets secondaires inattendus si plusieurs processus sont surveillés par le superviseur.
La bonne façon de le faire est d'émettre
supervisorctl reread
ce qui l'amène à analyser les fichiers de configuration pour tout changement:Ensuite, rechargez simplement cette application:
la source
avail
. Ajoutez-le aux processus (re) démarrables en émettantsupervisorctl update
. Voir aussi la réponse de Mark serverfault.com/a/479754/125887supervisorctl update
était nécessaire.J'ai rencontré ce problème en utilisant le paquet superviseur, version 3.0a8-1.1 d'Ubuntu Server 12.10. J'ai fini par résoudre le problème en lisant l'aide intégrée:
En particulier, vous voulez utiliser la syntaxe:
Comme indiqué dans la documentation à l' adresse http://supervisord.org/configuration.html#programx-section - "Une section [programme: x] représente en réalité un" groupe de processus homogène "pour le superviseur (à partir de la version 3.0)." Alors peut-être que le problème est apparu pour la première fois dans la version 3.0.
PS: Je suis nouveau au superviseur; J'utilise https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor comme exemple de ce à quoi une configuration minimale devrait ressembler.
la source
J'ai eu un problème similaire (
myapp_live: ERROR (no such process)
) et c'était parce que ma définition de processus étaitquand cela aurait dû être
Bien que cela ne réponde pas à la question qui a été posée, j'ai été amené ici par le groupe Recherche qui cherche à trouver une solution à mon problème. J'espère donc que d'autres personnes le trouveront également ici.
la source
[program]
que seul, en suivant les documents, mais en le faisant[program:redis]
fonctionner pour moi. Les choses deviennent parfois bizarres!J'ai trouvé cette solution très pratique:
EDIT: avant de faire cela, vérifiez votre chemin supervisorctl en utilisant
which supervisorctl
pour vous assurer que vous ajoutez le bon chemin aux sudoers.Ajoutez cette ligne au fichier sudoers en utilisant
visudo
(où:myappuser
- l'utilisateur qui doit redémarrer votre application,myapp
- nom de l'application):Et puis simplement:
Vous n'êtes pas lié aux scripts de démarrage de la distribution et vous accordez des privilèges très limités à l'utilisateur qui redémarre votre application gunicorn. En outre, vous n'avez pas besoin de vous soucier de pid. La commande ne demandera pas de mot de passe, elle convient donc aux scripts bash / fabric à déploiement automatique. D'autre part, vous devez savoir que si supervisorctl est vulnérable à un bogue entraînant l'exécution de code, un utilisateur malveillant pourrait utiliser ce privilège sudo pour exécuter du code en tant que root (mais, à ma connaissance, aucun bogue n'a été découvert pour supervisord et c'est une grande chose de trouver une telle vulnérabilité).
la source
Lire le code de supervisorctl.py ici: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py
Vous pouvez voir que la mise à jour de supervisorctl (fonction do_update) appelle reloadConfig () exactement comme le fait le relecteur supervisorctl (fonction do_reread).
Donc, je pense qu’appeler relire n’est pas nécessaire si vous appelez update après.
Depuis la sortie de blâme, c’est comme ça depuis au moins juillet 2009.
la source
Voici une liste de contrôle:
Le nouveau fichier de configuration doit être nommé en fonction du modèle d’inclusion configuré dans /etc/supervisord.conf:
Comme nous le voyons dans mon cas, spam.ini serait inclus, mais spam.conf ne le serait pas.
Si vous avez créé le nouveau fichier en copiant un ancien, assurez-vous de changer la
[program:]
ligne. Parce que si vous êtes aussi stupide que d'avoir deux fichiers pour le même programme,supervisorctl reread
ce message d'erreur sans espoir vous laissera comme punition:Si votre fichier est détecté,
supervisorctl reread
devrait dire quelque chose comme:Ensuite, les
supervisorctl update spam
deux doivent le démarrer et le faire apparaître danssupervisorctl status
.la source
J'ai constaté que les scripts init.d n'étaient pas fiables sur différentes versions d'Ubuntu / Debian. La façon de le faire est la suivante:
la source
Soyez prudent avec les liens symboliques et inclure des fichiers sur Supervisor. Cela permettrait à toute personne ayant le privilège w sur /home/myapp/live/deploy/supervisord_live.ini de modifier le fichier ini et de lancer tout code malveillant. Ces fichiers ini doivent se trouver dans le répertoire conf de votre superviseur ou dans l'un des sous-répertoires qu'il contient.
la source
J'avais installé supervisrod avec yum install, qui a installé le superviseur de la version v2. *. Supervisor prend en charge les inclusions externes uniquement à partir de la version 3. Doit utiliser easy_install à la place pour installer Supervisor v3.
la source