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
:true
si le processus doit être lancé automatiquement,false
sinonuser
: 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_maxbytes
etstderr_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