Supervisor 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 commande
  • directory : Répertoire depuis lequel sera lancée la commande
  • autostart : true si le processus doit être lancé automatiquement, false sinon
  • user : L'utilisateur qui lancera la commande
  • stdout_logfile : Fichier dans lequel sera écrit tout ce qui est envoyé sur la sortie standard par la commande
  • stdout_logfile_maxbytes : Taille maximum du fichier contenant la sortie standard avant sa rotation
  • stdout_logfile_backups : Nombre de fichiers conservés par la rotation pour la sortie standard
  • stderr_logfile, stderr_logfile_maxbytes et stderr_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 processus
  • stop : Arrête un processus
  • restart : Relance un processus
  • status : Affiche l'état des processus gérés par supervisor
  • reread : Recharge les configurations connues par supervisor, sans relancer le démon ni aucun processus géré par supervisor
  • update : Recharge les configurations, en tenant compte des nouveaux fichiers, et relance les processus dont la configuration a été modifiée
  • reload : Relance le démon supervisord, ce qui recharge toutes les configurations, et relance tous les processus gérés par supervisor