Supervisor est un outil de surveillance qui contrôle divers processus enfants et gère le démarrage / redémarrage de ces processus enfants lorsqu'ils se terminent brusquement ou pour une raison quelconque. Il peut être étendu pour contrôler les processus via l'API XML-RPC sur des sites distants sans se connecter au serveur. Je couvrirai l'API XML-RPC dans la deuxième partie de cette série en deux parties..
Dans la première partie de cette série de didacticiels, je vais vous expliquer comment configurer Supervisor pour qu'il fonctionne avec notre application. Pour cela, je vais créer une application triviale dans Flask avec Gunicorn qui fera office de serveur HTTP WSGI..
Je suppose que vous avez une compréhension de base des meilleures pratiques de configuration de Flask, Gunicorn et de l’environnement à l’aide de virtualenv, à suivre lors du développement d’une application Python..
Les packages suivants doivent être installés pour développer et contrôler l'application que nous allons développer..
$ pip installer gunicorn supervisor Flask
Je vais maintenant créer une application triviale dans Flask. Cette application est petite mais répondra aux besoins de ce tutoriel.
Vous trouverez ci-dessous la structure de l'application:
flask_app / my_app / - __init__.py - views.py
depuis une importation de flacon Flask app = Flask (__ name__) import my_app.views
Dans le fichier ci-dessus, l'application a été configurée et initialisée.
from my_app import app @ app.route ('/') def hello_world (): retourne 'Bonjour au monde de la fiole!'
Dans le fichier ci-dessus, j'ai créé un noeud final Hello World simple..
Pour exécuter l'application en tant que processus, nous pouvons utiliser Gunicorn. Pour vérifier si Gunicorn fonctionne comme prévu, exécutez la commande suivante à partir du dossier de l'application..
$ gunicorn -w 4 -b 127.0.0.1:8000 my_app: app
Après cela, pointez votre navigateur sur http://127.0.0.1:8000/ pour voir la page d'accueil de l'application.
Maintenant, nous devons faire la même chose en utilisant Supervisor afin que cela fonctionne comme un démon et soit contrôlé par Supervisor lui-même plutôt que par une intervention humaine..
Tout d’abord, nous avons besoin d’un fichier de configuration Supervisor. Le superviseur recherche par défaut un etc
dossier qui a un fichier nommé supervisord.conf
. Dans les installations à l’échelle du système, ce dossier est /etc/
, et dans virtualenv, il cherchera un etc
dossier dans virtualenv, puis retomber sur /etc/
.
Dans le cas d'une installation à l'échelle du système, exécutez:
$ echo_supervisord_conf> /etc/supervisord.conf
Dans le cas de virtualenv, à partir du dossier racine de virtualenv, exécutez:
$ echo_supervisord_conf> etc / supervisord.conf
le echo_supervisord_conf
le programme est fourni par le superviseur; il imprime un exemple de fichier de configuration à l'emplacement spécifié. Cela va créer un fichier nommé supervisord.conf
à l'emplacement spécifié dans la commande ci-dessus.
Pour configurer Supervisor pour notre application, ajoutez le bloc suivant quelque part dans ce fichier:
[programme: supervisor_demo] commande =/ bin / gunicorn -w 4 -b 127.0.0.1:8000 mon_app: répertoire app = / supervisor-tutsplus-demo utilisateur = utilisateur # utilisateur pertinent autostart = true autorestart = true stdout_logfile = / tmp / app.log stderr_logfile = / tmp / error.log
Ici, nous configurons la commande qui doit être exécutée et à partir de quel répertoire il doit le faire sous quel utilisateur. Le redémarrage de l'application en cas d'échec est également spécifié. Les emplacements des fichiers journaux peuvent également être spécifiés. Il existe de nombreuses autres options de configuration, qui peuvent être consultées dans la documentation officielle de Supervisor..
Notez qu'il ne faut jamais exécuter les applications en tant qu'utilisateur root. C'est une faille de sécurité énorme car l'application se bloque, ce qui peut nuire au système d'exploitation lui-même..
Pour exécuter l'application à l'aide de Supervisor, exécutez les commandes suivantes:
$ supervisord $ supervisorctl status supervisor_demo RUNNING pid 22550, disponibilité 0:00:04
La première commande appelle le surveillant
serveur, et le suivant donne l’état de tous les processus enfants.
Chaque fois que vous apportez une modification à votre application et que vous souhaitez ensuite redémarrer Gunicorn afin qu'elle reflète les modifications, exécutez la commande suivante:
$ supervisorctl redémarrer tout
Vous pouvez également donner des processus spécifiques au lieu de tout redémarrer:
$ supervisorctl restart supervisor_demo
Supervisor fournit également une interface utilisateur Web qui peut être activée en activant la inet_http_server
bloc de configuration dans supervisord.conf
. Cette interface Web peut être consultée sur http: // localhost: 9001 /.
Dans ce tutoriel, nous avons vu comment configurer Supervisor et l'utiliser pour exécuter une application en tant que processus démon et contrôler les processus de manière collective ou sélective. Dans la deuxième partie de cette série de didacticiels, nous verrons comment contrôler et interroger Supervisor et ses programmes / processus à l’aide de l’API XML-RPC..