Gérer des démons avec Supervisor
ven. 13 sept. 2013 by MarmotteSupervisor est un outil qui permet de lancer des processus, et qui surveille leur exécution. Il est capable de relancer un processus en cas d'arrêt sur une erreur, ou sur demande de l'utilisateur.
Installation¶
Sous Debian, il suffit d'installer le paquet supervisor.
$ sudo apt-get install --no-install-recommends supervisor
Configuration¶
La configuration de supervisor se trouve dans le répertoire /etc/supervisor/conf.d.
Les fichiers doivent avoir l'extension .conf pour être pris en compte.
Ils sont au format ini standard avec des en-têtes de section de la forme [<SectionName>:<Identifier>].
Par habitude, je crée toujours un fichier par service, ce qui me permet de retrouver plus facilement les configurations.
Les deux éléments de configuration les plus utilisés sont les sections program et group.
Sections program¶
Une section program permet de définir les informations d'un processus qui sera lancé par supervisor.
Elle contient notamment les paramètres suivants :
command: Commande exécutée par supervisor, incluant les éventuels paramètres à passer à l'exécutable lancéenvironment: Définition de variables d'environnement pour l'exécution de la commandedirectory: Répertoire depuis lequel sera lancée la commandeautostart:truesi le processus doit être lancé automatiquement,falsesinonuser: L'utilisateur qui lancera la commandestdout_logfile: Fichier dans lequel sera écrit tout ce qui est envoyé sur la sortie standard par la commandestdout_logfile_maxbytes: Taille maximum du fichier contenant la sortie standard avant sa rotationstdout_logfile_backups: Nombre de fichiers conservés par la rotation pour la sortie standardstderr_logfile,stderr_logfile_maxbytesetstderr_logfile_backups: Même chose que les trois paramètres précédents, mais pour la sortie d'erreur
Exemple simple :
[program:<ProgramName>]
command=<Path>
user=<Username>
autostart=true
Sections group¶
Une section group permet de définir des groupes de programmes.
Il sera alors possible d'effectuer des opérations sur tous les programmes du groupe en une seule commande.
Elle contient principalement le paramètre programs, qui contient une liste d'identifiants de programmes, séparés par des virgules.
Exemple simple :
[group:<GroupName>]
programs=<Program1>,<Program2>
Utilisation¶
Supervisor est basé sur une architecture client/serveur.
Le processus serveur supervisord est chargé de lancer et surveiller les processus, et le client supervisorctl envoie des directives au serveur.
Les commandes sont au format :
$ sudo supervisorctl <Command> <Identifier>
Par exemple :
$ sudo supervisorctl restart <ProgramName>
Lorsqu'un programme est dans un groupe, son identifiant doit être précédé du nom du groupe.
$ sudo supervisorctl <Command> <GroupName>:<ProgramName>
Les commandes les plus utilisées sont :
start: Démarre un processusstop: Arrête un processusrestart: Relance un processusstatus: Affiche l'état des processus gérés par supervisorreread: Recharge les configurations connues par supervisor, sans relancer le démon ni aucun processus géré par supervisorupdate: Recharge les configurations, en tenant compte des nouveaux fichiers, et relance les processus dont la configuration a été modifiéereload: Relance le démonsupervisord, ce qui recharge toutes les configurations, et relance tous les processus gérés par supervisor