Modes de paiement Abuse

Comment configurer SuperVisor

18.04.2022, 23:02

Pour gérer les processeurs sous Linux, il existe des systèmes d'initialisation comme systemd. Si vous avez besoin d'une solution plus simple, un programme qui peut gérer les processus de votre application, soit sur le système, soit dans un conteneur Docker. Un tel programme existe - il s'agit de supervisor. Il s'agit d'un gestionnaire de processus open-source fonctionnellement simple écrit en Python, qui peut être utilisé pour exécuter autant de copies d'un processus que nécessaire et surveiller leur état. Nous allons vous montrer ci-dessous comment installer et configurer Supervisor en utilisant Ubuntu 20.04 comme exemple.

Installation de Supervisor

La manière la plus simple d'obtenir le programme est de l'installer à partir des dépôts officiels. Pour ce faire, vous devez exécuter la commande :

$ sudo apt install supervisor

Comment configurer SuperVisor

Si vous souhaitez que le programme fonctionne en permanence, vous devez l'ajouter à votre autoloader et l'exécuter. Exécuter :

$ sudo systemctl enable supervisor --now

Comment configurer SuperVisor

Vous pouvez ensuite consulter l'état du programme à l'aide de la commande :

$ sudo systemctl status supervisor

Comment configurer SuperVisor

Processus de configuration

Le fichier de configuration se trouve dans /etc/supervisor/supervisord.conf. C'est également là que se trouvent les paramètres de base. Il est préférable d'utiliser le répertoire /etc/supervisor/conf.d/ pour configurer les processus en cours d'exécution. Le fichier de configuration principal peut être laissé par défaut. Voyons comment créer des fichiers de configuration pour les programmes. La syntaxe d'une section pour un processus unique ressemble à ceci :

nom de la variable valeur

Pour chaque processus, il est nécessaire de passer ces variables pour qu'il démarre automatiquement et se rétablisse après un crash :

  • directory - répertoire de travail ;
  • command - commande de démarrage du processus ;
  • user- l'utilisateur au nom duquel le processus sera lancé ;
  • autostart - indique si le processus doit être démarré automatiquement ;
  • autorestart- si le processus doit être redémarré ;

Cependant, il existe de nombreux autres paramètres disponibles, dont certains seront abordés dans cet article :

  • priority - prioritédu processus à démarrer ;
  • environment - variables d'environnement à transmettre au processus ;
  • stdout_logfile - où rediriger la sortie stdout du processus ;
  • stderr_logfile - où rediriger la sortie stderr du processus ;
  • process_name- nom du processus, avec possibilité de remplacer le numéro de copie ;
  • numprocs - nombre de copies du processus à démarrer ;
  • startretries - nombre de tentatives de démarrage du programme ;
  • redirect_stderr - redirige la sortie d'erreur du processus vers la sortie du superviseur ;
  • redirect_stdout - redirige la sortie du processus vers la sortie du superviseur.

Pour une meilleure compréhension et un meilleur exemple, exécutons un script PHP qui restera en arrière-plan :

$ sudo vi /home/sergiy/program/process.php

<?php
echo "Started...";
while(true){
  sleep(5);
}

Vous pouvez créer un fichier de configuration du superviseur distinct pour le processus. Vous pouvez insérer la configuration à la fin du fichier de configuration principal, mais il est préférable de ne pas le faire. Il est préférable de créer un fichier de configuration distinct pour chaque programme dans /etc/supervisor/conf.d/ avec le nom *.conf. Par exemple, pour ce programme, ce fichier ressemblera à ceci :

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true

Il faut ensuite redémarrer le superviseur, ce qui peut être fait avec systemctl :

$ sudo systemctl restart supervisor

ou avec l'utilitaire supervisorctl:

$ sudo supervisorctl reload

Comment configurer SuperVisor

Vous pouvez également voir l'état des processus configurés à l'aide de la commande :

Comment configurer SuperVisor

Si le processus est dans l'état RUNNING, c'est bien et il a été démarré avec succès. Mais dans ce cas, le processus est exécuté dans une seule instance, et il est souvent nécessaire d'exécuter plusieurs copies du même processus. Pour ce faire, nous pouvons utiliser les paramètres process_name et numprocs. Le premier vous permet de modifier le nom du processus pour qu'il contienne le numéro de la copie, et le second vous permet de spécifier le nombre de copies à exécuter.

La variable process_name contient généralement un modèle de formatage de chaîne python qui contient le nom du programme et le numéro du processus : %(program_name)s_%(process_num)02d. Ici, le nom de la variable est entre parenthèses, suivi de son type. Par exemple, pour exécuter le même programme dans quatre threads, le fichier de configuration doit être défini sous cette forme :

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4

Nous devons maintenant recharger supervisorctl et 4 processus seront en cours d'exécution :

$ sudo supervisorctl status

Comment configurer SuperVisor

En même temps, il est possible de sauvegarder toutes les données produites par le programme dans le fichier journal. Les paramètres stdout_logfile et stderr_logfile sont utilisés à cet effet. Par exemple, vous pouvez enregistrer le fichier journal de l'exécution du programme directement dans le dossier où se trouve le programme.

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4


stdout_logfile=/home/sergiy/program/process.log


stderr_logfile=/home/sergiy/program/process.log.error

Après le redémarrage du service, les journaux apparaîtront dans le dossier du programme :

Comment configurer SuperVisor

De même, si vous souhaitez rediriger la sortie de vos processus vers la sortie standard du superviseur, vous devez utiliser les paramètres redirect_stderr et redirect_stdout. Si votre programme a besoin de variables d'environnement, vous pouvez les passer en utilisant le paramètre environment. Les variables doivent être écrites avec des virgules. Par exemple, les variables doivent être écrites avec une virgule :

$ environment=DISPLAY=":1",HOME="/root"

Après chaque changement de configuration, n'oubliez pas de redémarrer supervisor pour appliquer les changements. L'utilitaire supervisorctl peut être utilisé pour contrôler les processus. Comme vous l'avez déjà compris, pour voir la liste des processus, il faut les exécuter :

$ sudo supervisorctl status

Puis, connaissant le nom du processus, vous pouvez le redémarrer, par exemple process:process_00:

$ sudo supervisorctl restart process:process_00

Comment configurer SuperVisor

Arrêter :

$ sudo supervisorctl stop process:process_00

ou le démarrer :

$ sudo supervisorctl start process:process_00

Vous pouvez également vous connecter au processus et voir ce qu'il envoie à stdout/stderr à l'aide de la commande fg:

$ sudo supervisorctl fg process:process_00

Nous avons vu comment le superviseur est configuré et comment utiliser le logiciel de gestion des processus.