Supervisor est un système client / serveur utilisé pour contrôler un certain nombre de processus UNIX, plus spécifiquement les processus liés à un projet ou à un client. Par exemple, vous pouvez utiliser le superviseur pour générer et surveiller un nombre arbitraire de files d'attente de travail de votre application Web.
Les composants de ce système sont:
- supervisord: la partie serveur du système.
- supervisorctl: l' interface de ligne de commande utilisée pour interagir avec le serveur.
- Serveur Web: un serveur Web simple et une interface utilisateur Web avec des fonctionnalités de base par rapport à supervisorctl .
- Interface XML-RPC: le même serveur HTTP utilisé par le client Web sert une interface XML-RPC qui peut être utilisée pour contrôler les programmes du superviseur.
Dans ce didacticiel, nous allons installer la version la plus récente du superviseur, montrer comment générer et gérer des programmes supervisorctl
et configurer une interface Web pour gérer nos programmes.
Installation et configuration de base
Nous allons installer le superviseur via easy_install
, une fonctionnalité des setuptools de python.
Tout d'abord, mettez à jour votre liste de packages locaux, puis installez python setuptools
.
sudo apt-get update && sudo apt-get install python-setuptools
Maintenant, nous pouvons installer le superviseur.
sudo easy_install supervisor
Une fois l'installation terminée, nous devons générer notre fichier de configuration. Créez un dossier nommé à l' supervisor
intérieur /etc
.
sudo mkdir /etc/supervisor
Et puis exécutez ce qui suit.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Si vous n'êtes pas connecté avec l' root
utilisateur, vous pouvez obtenir une Permission denied
erreur (même avec sudo
). Cela est dû à la redirection. Pour surmonter cela, connectez-vous en tant que root.
sudo su
Ensuite, vous pouvez réexécuter la commande.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Vous pouvez maintenant laisser l' root
utilisateur avec la exit
commande. La echo_supervisord_conf
commande a été fournie par notre superviseur d'installation.
Configuration de base
Ouvrez le /etc/supervisor/supervisord.conf
fichier et vérifiez son contenu. Vous remarquerez que ce fichier de configuration suit la INI
syntaxe, et il est divisé par sections (représenté par des crochets comme dans [section-name]
).
Pour ajouter des programmes à gérer par le superviseur, il suffit de créer les [program]
sections appropriées . Cependant, pour éviter de déconner avec le fichier de configuration principal chaque fois que nous devons ajouter (ou modifier) un programme, nous utiliserons la [include]
section. Recherchez cette section, décommentez-la, puis modifiez-la pour qu'elle ressemble à ce qui suit.
[include]
files=conf.d/*.conf
Maintenant, pour chaque programme que nous voulons ajouter, nous allons créer un .ini
fichier dans le /etc/supervisor/conf.d/
répertoire. Permet de créer ce dossier.
sudo mkdir /etc/supervisor/conf.d
Démarrage du serveur superviseur
Comme indiqué précédemment, le superviseur est composé d'un serveur et de clients qui s'y connectent. Pour pouvoir gérer et contrôler les programmes, nous devons démarrer le serveur. Pour ce faire, nous enregistrerons le serveur superviseur dans systemd
, afin que le serveur puisse être démarré au démarrage du système.
Pour ce faire, créez un fichier appelé supervisord.service
dans le /etc/systemd/system
répertoire.
sudo touch /etc/systemd/system/supervisord.service
Ajoutez le contenu suivant au fichier.
[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Alias=supervisord.service
Activez le service Supervord.
sudo systemctl start supervisord.service
Tant que le fichier de service se trouve dans le /etc/systemd/system
répertoire, il sera automatiquement démarré au démarrage du système.
Vous pouvez vérifier l'état du service.
systemctl status supervisord.service
Vous pouvez également consulter les journaux.
sudo journalctl -u supervisord.service
Ajout de programmes
Les programmes contrôlés par le superviseur sont donnés par différentes [program]
sections de la configuration. Pour chaque programme que nous voulons gérer, nous créerons un fichier de configuration autonome informant le chemin exécutable de la commande, toutes les variables d'environnement, comment exécuter en cas d'arrêt.
Tout d'abord, créons un script simple qui enregistre un horodatage. Créez un fichier appelé hello_supervisor.sh
(partout où vous le souhaitez, nous référencerons le chemin complet de ce script).
touch hello_supervisor.sh
Maintenant, mettez-y le contenu suivant
#!/bin/bash
while true
do
# Echo current timestamp to stdout
echo Hello Supervisor: `date`
# Echo 'error!' to stderr
echo An error ocurred at `date`! >&2
sleep 1
done
Rendez-le maintenant exécutable
chmod +x hello_supervisor.sh
En termes pratiques, ce script est pratiquement inutile. Cependant, nous pouvons l'utiliser pour démontrer le pouvoir du superviseur. Créez le fichier de configuration correspondant en exécutant ce qui suit.
sudo touch /etc/supervisor/conf.d/hello_supervisor.conf
Maintenant, mettez le contenu suivant dans ce fichier.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Remarque: assurez-vous de remplacer USER
par votre nom d'utilisateur.
Nous allons revoir cette configuration étape par étape.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
Tout d'abord, la configuration commence par définir un programme de nom hello_supervisor . Il informe également le chemin complet de l'exécutable à exécuter.
autostart=true
Cette ligne indique que ce programme doit être démarré automatiquement au démarrage du superviseur.
autorestart=true
Si le programme se ferme, pour une raison quelconque, cette ligne informe le superviseur de redémarrer automatiquement le processus.
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Ces lignes définissent l'emplacement du fichier journal pour stderr
et stdout
, respectivement.
Gérer les programmes
Maintenant que nous avons installé et configuré le superviseur, nous sommes en mesure de gérer nos processus.
Après avoir ajouté un nouveau programme, nous devons exécuter les deux commandes suivantes, pour informer le serveur de relire les fichiers de configuration et d'appliquer les modifications.
sudo supervisorctl reread
sudo supervisorctl update
Exécutez maintenant le supervisorctl
client.
sudo supervisorctl
Vous serez accueilli avec une liste des processus enregistrés. Vous verrez un processus appelé hello_supervisor
avec un RUNNING
statut.
hello_supervisor RUNNING pid 6853, uptime 0:22:30
supervisor>
Tapez help
pour une liste de commandes disponibles.
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
En un mot, nous pouvons start
, stop
et des restart
programmes en passant le nom du programme comme argument à la commande respective.
supervisor> stop hello_supervisor
hello_supervisor: stopped
supervisor> start hello_supervisor
hello_supervisor: started
supervisor> restart hello_supervisor
hello_supervisor: stopped
hello_supervisor: started
supervisor>
Nous pouvons également jeter un œil à la sortie du programme avec la tail
commande.
supervisor> tail hello_supervisor
Hello Supervisor: Mon Sep 25 19:27:29 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:30 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:31 UTC 2017
Pour la stderr
sortie, vous pouvez également utiliser tail
.
supervisor> tail hello_supervisor stderr
An error ocurred at Mon Sep 25 19:31:12 UTC 2017!
An error ocurred at Mon Sep 25 19:31:13 UTC 2017!
An error ocurred at Mon Sep 25 19:31:14 UTC 2017!
En appelant la status
commande, vous pouvez afficher l'état de tous les programmes enregistrés.
Une fois que vous avez terminé, vous pouvez quitter.
supervisor> quit
Le client du serveur Web
Pour autoriser l'accès au serveur Web Supervisord, ouvrez le fichier de configuration Supervisord et recherchez la [inet_http_server]
section.
nano /etc/supervisor/supervisord.conf
Maintenant, mettez à jour la configuration de cette section avec ce qui suit.
[inet_http_server]
port=*:9001
username=your_username
password=your_password
Remplacez your_username
et your_password
avec vos informations d'identification souhaitées, enregistrez vos modifications et redémarrez le service de supervision.
sudo systemctl restart supervisord.service
N'oubliez pas d'autoriser l' TCP
accès au port 9001
de votre pare-feu, puis d'accéder à http://{server-ip}:9001
partir de votre navigateur. Lorsqu'on vous le demande, fournissez votre username
et password
. Vous pouvez désormais contrôler vos processus à partir du Web.
Conclusion
Nous avons installé la version la plus récente de supervisord, appris à la configurer pour le démarrage automatique du système avec systemd et également examiné une utilisation de base de supervisorctl
. Pour une configuration et des cas d'utilisation plus avancés, vous pouvez vous référer à la documentation officielle de Supervisord .