Supervisor ist ein Überwachungstool, das verschiedene untergeordnete Prozesse steuert und den Start / Neustart dieser untergeordneten Prozesse übernimmt, wenn sie aus bestimmten Gründen abrupt beendet werden oder beendet werden. Es kann erweitert werden, um die Prozesse über die XML-RPC-API über Remote-Standorte zu steuern, ohne sich am Server anmelden zu müssen. Ich werde die XML-RPC-API im zweiten Teil dieser zweiteiligen Serie behandeln.
Im ersten Teil dieser Tutorialserie werde ich Ihnen zeigen, wie Sie Supervisor für die Arbeit mit unserer Anwendung einrichten. Dafür werde ich zusammen mit Gunicorn eine triviale Anwendung in Flask erstellen, die als WSGI-HTTP-Server fungiert.
Ich gehe davon aus, dass Sie über grundlegende Kenntnisse der bewährten Vorgehensweisen von Flask, Gunicorn und Umgebungseinstellungen mit virtualenv verfügen, die bei der Entwicklung einer Python-Anwendung zu beachten sind.
Die folgenden Pakete müssen installiert werden, um die zu entwickelnde Anwendung zu entwickeln und zu steuern.
$ pip installieren gunicorn supervisor Flask
Ich werde jetzt eine triviale Anwendung in Flask erstellen. Diese Anwendung ist klein, erfüllt jedoch die Anforderungen dieses Tutorials.
Nachfolgend die Struktur der Anwendung:
flask_app / my_app / - __init__.py - views.py
aus flask import Flask app = Flask (__ name__) import my_app.views
In der obigen Datei wurde die Anwendung konfiguriert und initialisiert.
von my_app import app @ app.route ('/') def hello_world (): 'Hallo zur Welt der Flasche!' zurückkehren
In der obigen Datei habe ich einen einfachen Hello-World-Endpunkt erstellt.
Um die Anwendung als Prozess auszuführen, können wir Gunicorn verwenden. Um zu überprüfen, ob Gunicorn wie erwartet funktioniert, führen Sie einfach den folgenden Befehl im Anwendungsordner aus.
$ gunicorn -w 4 -b 127.0.0.1:8000 my_app: app
Rufen Sie anschließend Ihren Browser auf http://127.0.0.1:8000/ auf, um die Startseite der Anwendung anzuzeigen.
Jetzt müssen wir dasselbe mit Supervisor tun, damit dieser als Dämon ausgeführt wird und von Supervisor selbst gesteuert wird, anstatt durch menschliche Eingriffe.
Zunächst benötigen wir eine Supervisor-Konfigurationsdatei. Supervisor sucht standardmäßig nach einem usw
Ordner mit einer Datei namens supervisord.conf
. Bei systemweiten Installationen lautet dieser Ordner /usw/
, und in virtualenv wird es nach einem suchen usw
Ordner in Virtualenv und dann wieder auf /usw/
.
Führen Sie bei einer systemweiten Installation Folgendes aus:
$ echo_supervisord_conf> /etc/supervisord.conf
Führen Sie im Fall von virtualenv aus dem virtualenv-Stammordner Folgendes aus:
$ echo_supervisord_conf> etc / supervisord.conf
Das echo_supervisord_conf
Programm wird vom Supervisor zur Verfügung gestellt; Es druckt eine Beispielkonfigurationsdatei an den angegebenen Speicherort. Dadurch wird eine Datei mit dem Namen erstellt supervisord.conf
an der im obigen Befehl angegebenen Stelle.
Um Supervisor für unsere Anwendung zu konfigurieren, fügen Sie den folgenden Block irgendwo in dieser Datei hinzu:
[Programm: Supervisor_demo] Befehl =/ bin / gunicorn -w 4 -b 127.0.0.1:8000 my_app: Anwendungsverzeichnis = / supervisor-tutsplus-demo user = someuser # Relevanter Benutzer autostart = true autorestart = true stdout_logfile = / tmp / app.log stderr_logfile = / tmp / error.log
Hier konfigurieren wir den Befehl, der ausgeführt werden muss und von welchem Verzeichnis aus unter welchem Benutzer er ausgeführt werden muss. Außerdem wird angegeben, ob die Anwendung im Fehlerfall neu gestartet werden soll. Die Speicherorte der Protokolldateien können ebenfalls angegeben werden. Es gibt viele andere Konfigurationsoptionen, die in der offiziellen Dokumentation von Supervisor nachgeschlagen werden können.
Notieren Sie sich, dass Sie die Anwendungen niemals als Root-Benutzer ausführen dürfen. Dies ist ein schwerwiegender Sicherheitsfehler, da die Anwendung abstürzt, was das Betriebssystem selbst beschädigen kann.
Führen Sie die folgenden Befehle aus, um die Anwendung mit Supervisor auszuführen:
$ supervisord $ supervisorctl status supervisor_demo RUNNING pid 22550, Betriebszeit 0:00:04
Der erste Befehl ruft die Supervisor
Server, und der nächste gibt einen Status aller untergeordneten Prozesse an.
Führen Sie jedes Mal, wenn Sie eine Änderung an Ihrer Anwendung vornehmen und Gunicorn neu starten möchten, um die Änderungen wiederzugeben, den folgenden Befehl aus:
$ supervisorctl alle neu starten
Sie können auch bestimmte Prozesse angeben, anstatt alles neu zu starten:
$ supervisorctl Supervisor_demo neu starten
Supervisor bietet auch eine Web-Benutzeroberfläche, die durch Aktivieren von aktiviert werden kann inet_http_server
Konfigurationsblock in supervisord.conf
. Diese Web-Benutzeroberfläche kann unter http: // localhost: 9001 / nachgeschlagen werden..
In diesem Lernprogramm haben wir gesehen, wie Sie Supervisor konfigurieren und verwenden, um eine Anwendung als Daemon-Prozess auszuführen und die Prozesse gemeinsam oder selektiv zu steuern. Im zweiten Teil dieser Tutorialreihe erfahren Sie, wie Sie Supervisor und seine Programme / Prozesse mithilfe der XML-RPC-API steuern und abfragen.