Gérer ces processus/démons Python avec 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:

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:

Il suffit donc d'ajouter la section suivante en fin du fichier  /etc/supervisor/supervisord.conf:

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:

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:

Je vous laisse regarder les autres commandes disponibles avec supervisorctl:

 

  • fyl

    pour y etre en plein en ce moment, on peu egalement administrer par le web qui possede egalement tail, restart start et stop pour chaqu’un des process . on peut regler plus finement (attendre x seconde de redemarage, nb de retart auto quand ca plante, etc…)on peu egalement rajouter de la communication entre les process via le stdin en fait et se connecter en RPC avec une methode personnelle. C’est pas mal
    même si j’ai parfois des ratés dans les tails …
    ca fait qand meme bien le travail

  • Pingback: Linux | Pearltrees

  • http://blog.kiven.fr/ Kevin

    Sans vouloir troller, mais systemd permet de faire le même genre de choses avec un fichier de service avec un truc du genre

    [Unit]
    Description=Glances
    After=network.target remote-fs.target

    [Service]
    Type=simple
    User=glances
    PIDFile=/var/run/glances.pid
    ExecStart=/usr/local/bin/glances -s -C /etc/glances/glances.conf -P motdepasse

    [Install]
    WantedBy=multi-user.target

    • http://blog.seboss666.info/ Seboss666

      L’avantage de supervisor est que justement il ne repose pas sur systemd, qui est encore peu répandu sur le parc Linux, notamment au niveau des serveurs (qui tournent très souvent sur du Debian/Ubuntu).

      Donc pas besoin d’attendre 10 ans que systemd soit partout pour pouvoir profiter d’une telle fonctionnalité.

    • http://blog.nicolargo.com/ Nicolas Hennion

      Pour moi, le principal avantage de cette solution par rapport à d’autre est son ouverture avec notamment son API XML-RPC: http://supervisord.org/api.html
      Il est ainsi possible simplement de coder la supervision de ces processus directement dans ses propres programmes.

  • LyRiX

    Chez nous, on utilisait supervisord, mais maintenant on fait du upstart avec ubuntu qui est quand meme beaucoup plus simple pour le end user.

    Et pour info, ca gère d’autre deamon que le deamon python. Les notres sont en PHP :p (ouverture d’un troll ?)