Supervisor is een monitoringtool die verschillende kindprocessen bestuurt en het starten / opnieuw opstarten van deze kindprocessen beheert wanneer deze abrupt afsluiten of om een of andere reden verlaten. Het kan worden uitgebreid om de processen via de XML-RPC API te besturen via externe locaties zonder in te loggen op de server. Ik zal de XML-RPC API in het tweede deel van deze tweedelige serie behandelen.
In het eerste deel van deze tutorialserie zal ik u laten zien hoe u Supervisor kunt instellen om met onze applicatie te werken. Hiervoor maak ik samen met Gunicorn een triviale applicatie in Flask om op te treden als onze WSGI HTTP-server.
Ik neem aan dat u een basiskennis hebt van de praktische tips voor Flask, Gunicorn en omgevingen instellen met behulp van virtualenv bij het ontwikkelen van een Python-toepassing.
De volgende pakketten moeten worden geïnstalleerd voor het ontwikkelen en besturen van de applicatie die we zullen ontwikkelen.
$ pip installeer gunicorn supervisor Flask
Ik ga nu een triviale toepassing maken in Flask. Deze applicatie is klein maar voldoet aan de behoeften van deze tutorial.
Hieronder is de structuur van de applicatie:
flask_app / mijn_app / - __init__.py - views.py
uit de flacon import Flask app = Flask (__ name__) importeer mijn_app.views
In het bovenstaande bestand is de applicatie geconfigureerd en geïnitialiseerd.
van my_app import app @ app.route ('/') def hello_world (): retourneer 'Hello to the World of Flask!'
In het bovenstaande bestand heb ik een eenvoudig Hello World-eindpunt gemaakt.
Om de applicatie als een proces uit te voeren, kunnen we Gunicorn gebruiken. Als u wilt controleren of Gunicorn naar verwachting werkt, voert u de volgende opdracht uit vanuit de toepassingsmap.
$ gunicorn -w 4 -b 127.0.0.1:8000 my_app: app
Hierna richt u uw browser naar http://127.0.0.1.18000/ om de startpagina van de toepassing te bekijken.
Nu moeten we hetzelfde doen met Supervisor, zodat dit als een daemon wordt uitgevoerd en door de supervisor zelf wordt beheerd in plaats van door menselijke tussenkomst.
Allereerst hebben we een Supervisor-configuratiebestand nodig. Supervisor zoekt standaard naar een enz
map die een bestand heeft met de naam supervisord.conf
. In systeembrede installaties is deze map /enz/
, en in virtualenv zal het zoeken naar een enz
map in virtualenv en ga daarna terug naar /enz/
.
In het geval van een systeembrede installatie:
$ echo_supervisord_conf> /etc/supervisord.conf
In het geval van virtualenv, vanuit de virtuele root-map, voer je uit:
$ echo_supervisord_conf> etc / supervisord.conf
De echo_supervisord_conf
programma wordt verzorgd door Supervisor; het drukt een voorbeeldconfiguratiebestand af naar de opgegeven locatie. Hiermee wordt een bestand met de naam gemaakt supervisord.conf
op de locatie die is opgegeven in de bovenstaande opdracht.
Om Supervisor voor onze applicatie te configureren, voegt u ergens in dit bestand het volgende blok toe:
[programma: supervisor_demo] command =/ bin / gunicorn -w 4 -b 127.0.0.1:8000 mijn_app: app-map = / supervisor-tutsplus-demo user = someuser # Relevante gebruiker autostart = true autorestart = true stdout_logfile = / tmp / app.log stderr_logfile = / tmp / error.log
Hier configureren we de opdracht die moet worden uitgevoerd en vanuit welke directorylocatie dit moet worden gedaan onder welke gebruiker. Ook wordt opgegeven of de toepassing opnieuw moet worden opgestart in geval van een storing. De locaties van de logbestanden kunnen ook worden opgegeven. Er zijn veel andere configuratieopties die kunnen worden opgezocht in de officiële documentatie van Supervisor.
Merk op dat je de applicaties nooit als root-gebruiker zou moeten uitvoeren. Dit is een groot beveiligingsprobleem omdat de applicatie crasht, wat het besturingssysteem zelf kan schaden.
Voer de volgende opdrachten uit om de toepassing uit te voeren met Supervisor:
$ supervisord $ supervisorctl status supervisor_demo RUNNING pid 22550, uptime 0:00:04
Het eerste commando roept de supervisord
server en de volgende geeft een status van alle onderliggende processen.
Elke keer dat u een wijziging in uw toepassing aanbrengt en vervolgens Gunicorn opnieuw wilt opstarten om de wijzigingen te kunnen weergeven, voert u de volgende opdracht uit:
$ supervisorctl herstart alles
U kunt ook specifieke processen opgeven in plaats van alles opnieuw te starten:
$ supervisorctl restart supervisor_demo
Supervisor biedt ook een Web UI-interface die kan worden ingeschakeld door de inet_http_server
configuratieblok in supervisord.conf
. Deze Web UI kan worden opgezocht op http: // localhost: 9001 /.
In deze zelfstudie hebben we gezien hoe Supervisor moet worden geconfigureerd en gebruikt om een toepassing als een daemonproces uit te voeren en de processen collectief of selectief te besturen. In het tweede deel van deze tutorialserie zullen we zien hoe Supervisor en zijn programma's / processen kunnen worden bestuurd en ondervraagd met behulp van de XML-RPC API.