Övervaka och styra program med hjälp av handledare Del 1

Handledare är ett övervakningsverktyg som styr olika barnprocesser och hanterar start / omstart av dessa barnprocesser när de går abrupt eller avslutar på grund av vissa orsaker. Det kan utökas för att styra processerna via XML-RPC API över avlägsna platser utan att logga in på servern. Jag kommer att täcka XML-RPC API i den andra delen av den här tvådelade serien.

I den första delen av den här handledningsserien tar jag dig igenom hur du konfigurerar handledare för att arbeta med vår ansökan. För detta kommer jag att skapa en trivial applikation i flaskan tillsammans med Gunicorn för att fungera som vår WSGI HTTP-server. 

Jag antar att du har en grundläggande förståelse för flask-, gunicorn- och miljöinstallationens bästa praxis med virtualenv som ska följas när du utvecklar en Python-applikation.

Installera paket

Följande paket måste installeras för att utveckla och styra applikationen vi ska utveckla.

$ pip installera gunicorn supervisor Flask

Trivial Application

Jag ska nu skapa en trivial applikation i Flaskan. Denna applikation är liten men kommer att uppfylla behoven hos denna handledning.

Nedan är applikationens struktur:

flask_app / my_app / - __init__.py - views.py

flask_app / my_app / __ init__.py

från kolv import Flask app = Flask (__ name__) Importera my_app.views

I filen ovan har applikationen konfigurerats och initialiserats.

flask_app / my_app / views.py

från my_app importera app @ app.route ('/') def hello_world (): returnera "Hej till världen av kolven!"

I filen ovan har jag skapat en enkel Hello World endpoint.

För att köra applikationen som en process kan vi använda Gunicorn. För att kontrollera om Gunicorn fungerar som förväntat, kör bara följande kommando från insidan av programmappen.

$ gunicorn -w 4 -b 127.0.0.1:8000 my_app: app

Därefter pekar webbläsaren på http://127.0.0.1:8000/ för att se programmets hemsida.

Konfigurera och använda Supervisor

Nu måste vi göra detsamma med hjälp av handledare så att detta går som en demon och kommer att styras av handledaren själv i stället för mänsklig ingripande. 

Först och främst behöver vi en Supervisor-konfigurationsfil. Handledare söker som standard efter en etc mapp som har en fil som heter supervisord.conf. I systemövergripande installationer är den här mappen /etc/, och i virtualenv kommer det att leta efter en etc mapp i virtualenv och sedan falla tillbaka till /etc/.

Om det gäller en systemövergripande installation, kör:

$ echo_supervisord_conf> /etc/supervisord.conf

När det gäller virtualenv, från insidan av virtualenv-rotmappen, kör:

$ echo_supervisord_conf> etc / supervisord.conf

De echo_supervisord_conf Programmet tillhandahålls av handledare det skriver ut en sample config-fil till den angivna platsen. Detta skapar en fil som heter supervisord.conf på den plats som anges i ovanstående kommando.

För att konfigurera Supervisor för vår ansökan, lägg till följande block någonstans i den här filen:

[program: supervisor_demo] command =/ bin / gunicorn -w 4 -b 127.0.0.1:8000 my_app: app katalog =/ supervisor-tutsplus-demo user = someuser # Relevant användare autostart = true autorestart = true stdout_logfile = / tmp / app.log stderr_logfile = / tmp / error.log

Här konfigurerar vi kommandot som måste köras och från vilken katalogplats det behöver göra under vilken användare. Också anges huruvida programmet ska startas om det inte uppstår något fel. Logfilernas platser kan också anges. Det finns många andra konfigurationsalternativ, som kan ses i den officiella dokumentationen av handledaren.

Notera att man aldrig ska köra applikationerna som en root-användare. Detta är en stor säkerhetsfel då programmet kraschar, vilket kan skada OS själv.

För att köra programmet med hjälp av Supervisor, kör följande kommandon:

$ supervisord $ supervisorctl status supervisor_demo RUNNING pid 22550, upptid 0:00:04

Det första kommandot anropar supervisord server, och nästa ger status för alla barnprocesser.

Varje gång du ändrar din ansökan och sedan vill starta om Gunicorn för att den ska spegla ändringarna, kör följande kommando:

$ supervisorctl starta om allt

Du kan också ge specifika processer istället för att starta om allt: 

$ supervisorctl starta om supervisor_demo

Handledare tillhandahåller även ett webbgränssnitt som kan aktiveras genom att aktivera inet_http_server konfigurationsblock i supervisord.conf. Denna webbgränssnitt kan ses på http: // localhost: 9001 /.

Slutsats

I denna handledning har vi sett hur du konfigurerar Supervisor och använder den för att köra en applikation som en demonprocess och styra processerna kollektivt eller selektivt. I den andra delen av den här handledningsserien ser vi hur man kontrollerar och utfrågar handledare och dess program / processer med hjälp av XML-RPC API.