Frage Supervisor lädt keine neuen Konfigurationsdateien


Ich habe ein Problem mit der Bereitstellung der Django-App mit Gunicorn und Supervisor. Während ich Gunicorn dazu bringen kann, meine App zu bedienen (indem ich den richtigen PYTHONPATH einstelle und einen entsprechenden Befehl ausführe, den von Supervisord config), kann ich keinen Supervisor dazu veranlassen, es auszuführen. Es wird nur meine App nicht sehen. Ich weiß nicht, wie ich sicherstellen soll, ob die Konfigurationsdatei in Ordnung ist.

Hier ist, was Supervisorctl sagt:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)

Ich benutze es auf Ubuntu 10.04 mit folgender Konfiguration:

Datei /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

In /etc/supervisor/supervisord.conf, am Ende der Datei, gibt es:

[include]
files = /etc/supervisor/conf.d/*.conf

und hier ist ein Symlink zu meiner Konfigurationsdatei:

# 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

Alles sieht gut aus für mich, aber supervisorctl immer wieder sagen myapp_live: ERROR (no such process). Irgendeine Lösung dafür?


61
2017-12-11 08:48


Ursprung


Ich kratzte mich am selben Problem; Meine Konfigurationsdateien wurden nicht geladen, als ich lief reread oder update. Es stellte sich heraus, dass ich meine Konfigurationsdateien als gespeichert hatte foo.conf.py anstatt foo.conf also wurden sie nicht identifiziert. - Timmy O'Mahony


Antworten:


Ich hatte das gleiche Problem, a

sudo service supervisord reload

hat den Trick gemacht, obwohl ich nicht weiß, ob das die Antwort auf deine Frage ist.


28
2017-12-20 14:34



Ich habe aufgehört und dann vor einiger Zeit angefangen Supervisor zu arbeiten und es hat funktioniert. Ich weiß nicht, ob das Nachladen funktionieren würde (wie ich es bei einem Neustart nicht tun würde), aber ich denke es könnte - grucha
Ich habe es auch getan und es hat funktioniert. ich wundere mich warum /etc/init.d/supervisor restart funktioniert nicht wenn manuelles Stoppen und Starten macht. - Kirill
Arbeitete für mich, obwohl der Service nicht funktionierte, also rannte ich einfach ps aux | grep supervisor und dann sudo kill -HUP pid - Wayne Werner
Dies ist gefährlich, da es den gesamten Supervisor-Daemon neu startet. - Mark Theunissen
superclectl reRead kann das auch beheben, ohne den Dienst neu zu starten. - Jonathan Liuti


Die richtige Antwort ist, dass der Supervisor Sie erneut lesen muss und Aktualisieren Sie, wenn Sie eine neue Konfigurationsdatei platzieren. Neustart ist nicht die Antwort, da dies andere Dienste betrifft. Versuchen:

supervisorctl reread
supervisorctl update

183
2018-02-17 20:03



Dies sollte die richtige Antwort sein. "Supervisor read read" allein ist nicht genug. - Miebster
+1 Dies ist eine bessere Antwort, da es nicht auf Prozessmanager angewiesen ist. - tidwall
"supervisorctl read" alleine ist nicht genug, aber würde "supervisorctl update" nicht ausreichen? Gemäß der Dokumentation "update" erfolgt ein erneutes Lesen, gefolgt von einem Neustart von Programmen, deren Konfiguration durch das erneute Lesen geändert wurde. - BlueBomber


Das erneute Laden des Master-Supervisor-Prozesses funktioniert zwar, hat jedoch unbeabsichtigte Nebenwirkungen, wenn mehr als ein Prozess vom Supervisor überwacht wird.

Der richtige Weg ist das Ausstellen supervisorctl reread Dadurch werden Konfigurationsdateien auf Änderungen überprüft:

root@debian:~# supervisorctl reread
gunicorn: changed

Dann lade einfach diese App neu:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started

14
2018-04-29 07:39



Dies ist die beste Lösung, wenn Sie nur eine geänderte / neue Konfigurationsdatei lesen und den Rest der laufenden Prozesse unberührt lassen möchten. Supervisorctl zeigt die neue App an avail. Fügen Sie es zu den (neu) startbaren Prozessen hinzu, indem Sie es ausgeben supervisorctl update. Siehe auch Marks Antwort serverfault.com/a/479754/125887 - Sjaak Trekhaak
Das war nicht genug für mich. supervisorctl update War notwendig. - Yaroslav Nikitenko


Stellen Sie sicher, dass Ihre Supervisor-Conf-Dateien in .conf enden

Nahm mich eine Weile, um das herauszufinden. Hoffentlich hilft es der nächsten Person.


14
2017-10-10 23:55



Waste eine Stunde in der gleichen Frage - kann nicht glauben, dass es so einfach war. - Zane Hooper
Vielen Dank, dass Sie diese Antwort aufgelistet haben. Für das Leben von mir konnte ich das nicht herausfinden. - Phillip Martin


Ich habe dieses Problem mit dem Supervisor-Paket, Version 3.0a8-1.1 von Ubuntu Server 12.10, festgestellt. Ich habe das Problem gelöst, indem ich die integrierte Hilfe gelesen habe:

$ sudo supervisorctl help restart
restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes

Insbesondere möchten Sie die Syntax verwenden:

sudo supervisorctl restart myapp_live:*

Wie es in der Dokumentation heißt http://supervisord.org/configuration.html#programx-section - "Ein [Programm: x] Abschnitt stellt tatsächlich eine" homogene Prozessgruppe "zum Supervisor dar (ab 3.0)." Vielleicht tauchte das Problem erst in der Version 3.0 auf.

PS: Ich bin neu im Supervisor; Ich benutze https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor als ein Beispiel dafür, wie eine Minimalkonfiguration aussehen sollte.


5
2017-10-10 01:23





Ich hatte ein ähnliches Problem ( myapp_live: ERROR (no such process) ) und es war, weil meine Prozessdefinition war

[program: myapp_live]

wann es hätte sein sollen

[program:myapp_live]

Während dies die gestellte Frage nicht anspricht, wurde ich hier von der Suche angeführt, dass ich nach einer Lösung für mein Problem suche, damit hoffentlich auch andere Leute es hier finden.


4
2018-06-02 01:46



Hier gilt das gleiche! Ich hatte es als verlassen [program] nur, den Dokumenten folgend, aber machend [program:redis] hat es für mich funktioniert. Dinge werden manchmal seltsam! - dotslash


Ich fand diese Lösung am bequemsten:

EDIT: Bevor Sie dies tun, überprüfen Sie Ihren Supervisorctl Pfad mit which supervisorctl um sicherzustellen, dass Sie den richtigen Pfad zu sudoers hinzufügen.

Fügen Sie diese Zeile mit sudoers file hinzu visudo (woher: myappuser - Der Benutzer, der Ihre App neustarten muss, myapp - App Name):

myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp

Und dann einfach:

sudo supervisorctl restart myapp

Sie sind nicht an die Startup-Skripts der Distribution gebunden und Sie erhalten ziemlich enge Berechtigungen für den Benutzer, der Ihre gunicorn-App neu startet. Außerdem müssen Sie sich nicht um Pid kümmern. Der Befehl fragt nicht nach dem Passwort, daher ist es für Bash / Fabric-Skripts mit automatischer Bereitstellung geeignet. Auf der anderen Seite - Sie müssen wissen, dass, wenn supervisorctl anfällig für einen Fehler ist, der die Ausführung von Code verursacht, ein böswilliger Benutzer diese sudo Berechtigung benutzen könnte, um Code als root auszuführen (aber soweit ich weiß, wurde kein solcher Fehler für supervisord und Es ist eine große Sache, eine solche Schwachstelle zu finden).


2
2017-07-31 09:00





Lesen Sie den Code von supervisorctl.py hier: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

Sie können sehen, dass Supervisorctl Update (Funktion do_update) reloadConfig () genau wie Supervisorctl read (Funktion do_resead) aufruft.

Also ich denke, dass das erneute Lesen nicht erforderlich ist, wenn Sie das Update danach aufrufen.

Von der Ausgabe von git war das seit mindestens seit Juli 2009 so.


2
2018-03-04 01:55