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 supervisorctlet 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' supervisorinté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' rootutilisateur, vous pouvez obtenir une Permission deniederreur (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' rootutilisateur avec la exitcommande. La echo_supervisord_confcommande a été fournie par notre superviseur d'installation.
Configuration de base
Ouvrez le /etc/supervisor/supervisord.conffichier et vérifiez son contenu. Vous remarquerez que ce fichier de configuration suit la INIsyntaxe, 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 .inifichier 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.servicedans le /etc/systemd/systemré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/systemré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 USERpar 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 stderret 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 supervisorctlclient.
sudo supervisorctl
Vous serez accueilli avec une liste des processus enregistrés. Vous verrez un processus appelé hello_supervisoravec un RUNNINGstatut.
hello_supervisor                 RUNNING   pid 6853, uptime 0:22:30
supervisor>
Tapez helppour 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, stopet des restartprogrammes 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 tailcommande.
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 stderrsortie, 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 statuscommande, 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_usernameet your_passwordavec 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' TCPaccès au port 9001de votre pare-feu, puis d'accéder à http://{server-ip}:9001partir de votre navigateur. Lorsqu'on vous le demande, fournissez votre usernameet 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 .