Gérer ces processus/démons Python avec Supervisor
Date: 2/10/2013 | Catégories: Developpement,Open-source,Planet-libre | Tags: daemon,demon,python,supervisor
C'est en lisant la document du projet 0Bin, une implémentation libre et auto-hébergé de PasteBin dont je reparlerai bientôt, que je suis tombé sur Supervisor. Supervisor est un système de contrôle de processus (comme launchd ou runinit) simple et orienté utilisateur (voir la documentation et les avantages ici) et donc idéal pour lancer des processus Python en mode démon (par un exemple un serveur Glances, mais ce n'est qu'un exemple...).
Installation de Supervisor
Sur un système Debian/Ubuntu, l'installation de Supervisor se résume à la saisie de la commande suivante dans un terminal:
sudo apt-get install supervisor
Une fois l'installation terminé, nous allons maintenant configurer Supervisor en utilisant le fichier /etc/supervisor/supervisord.conf (sur un système Debian).
Ajout d'un démon dans Supervisor
Nous allons donc prendre l'exemple d'un administrateur système qui souhaite que le serveur Glances soit lancé au démarrage de la machine et que celui ci soit redémarré automatiquement dans le cas ou Glances plante <mauvaisefois>ce qui n'arrive jamais</mauvaisefois>.
Pour lancer Glances en mode serveur, il faut utiliser la ligne de commande suivante:
/usr/local/bin/glances -s -C /etc/glances/glances.conf -P motdepasse
Il suffit donc d'ajouter la section suivante en fin du fichier /etc/supervisor/supervisord.conf:
; Glances server section [program:glances] command=/usr/local/bin/glances -s -C /etc/glances/glances.conf -P motdepasse user=nicolargo autostart=true autorestart=true
On demande a ce que le processus soit exécuté avec les droits d'un utilisateur standard (user=nicolargo dans mon exemple) et que le processus démarre automatiquement au démarrage de Supervisor (autostart=true) et qu'il soit bien redémarré si Supervisor détecte un problème sur le processus Glances.
Prendre en compte la configuration et administrer nos processus
Pour que notre configuration soit prise en compte, il faut relancer Supervisor avec les lignes de commandes:
sudo service supervisor stop sudo service supervisor start
Normalement, à ce stade, votre processus Glances server doit être lancé. Pour le vérifier vous pouvez utiliser la commande supervisorctl qui permet d'avoir un statu des processus et un moyen simple de les arrêter / démarrer.
Vérification du statu du service Glances server:
$ sudo supervisorctl status glances RUNNING pid 5844, uptime 0:26:11
Je vous laisse regarder les autres commandes disponibles avec supervisorctl:
$ sudo supervisorctl help default commands (type help <topic>): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version