Supervisor est un système client/serveur permettatn de surveiller et de contrôler des processus sur des systèmes d'exploitation de type UNIX. Il est particulièrement efficace pour s'assurer que des services critiques redémarrent automatiquement en cas de défaillance. Supervisor gère ses processus cibles en tant que sous-processus via des appels fork/exec, ce qui lui permet de connaître précisément leur état en temps réel.
Installation du gestionnaire sur CentOS
Sur CentOS, l'installation se fait généralement via le dépôt EPEL. Voici la procédure pour installer et activer le démon :
# Installation des dépôts nécessaires
yum install -y epel-release
yum install -y supervisor
# Activation du service au démarrage du système
systemctl enable supervisord
# Lancement immédiat du service
systemctl start supervisord
# Vérification de l'état du démon
systemctl status supervisord
ps aux | grep supervisord
Initialisation de la configuration
Si le fichier de configuration par défaut n'est pas présent ou doit être recréé, utilisez l'utilitaire echo_supervisord_conf. Il est recommandé de séparer la configuration principale des définitions de processus individuels.
mkdir -p /etc/supervisor/conf.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Anatomie du fichier supervisord.conf
Le fichier de configuration utilise un format INI. Voici les sections cruciales pour éviter les erreurs de connexion :
[unix_http_server]
file=/var/run/supervisor.sock ; Chemin vers le socket UNIX
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; Journal principal
pidfile=/var/run/supervisord.pid ; Fichier PID
nodaemon=false ; Lancer en arrière-plan
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; Doit correspondre à [unix_http_server]
[include]
files = /etc/supervisor/conf.d/*.conf ; Inclusion des fichiers de processus
Définition d'un processus surveillé
Pour chaque application à surveiller, créez un fichier dans /etc/supervisor/conf.d/. Par exemple, pour un worker Node.js ou PHP :
[program:app-worker]
command=/usr/bin/php /var/www/html/artisan queue:work --tries=3
process_name=%(program_name)s_%(process_num)02d
numprocs=4
autostart=true
autorestart=true
user=www-data
stdout_logfile=/var/log/app-worker.out.log
stderr_logfile=/var/log/app-worker.err.log
Résolution de l'erreur socket.error / Errno 2
L'erreur error: <class 'socket.error'>, [Errno 2] No such file or directory survient généralement lorsque l'utilitaire supervisorctl tante de communiquer avec le démon via un fichier socket qui n'existe pas ou n'est pas accessible.
Causes fréquentes et solutions :
- Le démon n'est pas lancé : Si
supervisordn'est pas actif, le fichier.sockn'est pas créé.
Solution :supervisord -c /etc/supervisor/supervisord.conf - Incohérence de chemin : Le chemin défini dans
[unix_http_server]diffère de celui dans[supervisorctl].
Solution : Vérifiez que la directiveserverurlpointe exactement vers le même fichier.sockque la section serveur. - Nettoyage du répertoire /tmp : Si le socket est placé dans
/tmp, le système peut le supprimer automatiquement.
Solution : Déplacez le socket vers/var/run/comme indiqué dans l'exemple de configuration ci-dessus.
Commandes de gestion courantes
Une fois la configuration ajustée, utilisez ces commandes pour gérer vos processus :
# Recharger la configuration sans redémarrer les processus inchangés
supervisorctl reread
supervisorctl update
# Vérifier l'état des services
supervisorctl status
# Redémarrer un processus spécifique
supervisorctl restart app-worker:*
# Si une authentification est requise :
# supervisorctl -u utilisateur -p mot_de_passe status
Si vous rencontrez l'erreur Server requires authentication, cela signifie que les options username et password ont été activées dans la section [unix_http_server]. Vous devez alors fournir ces identifiants à supervisorctl ou les configurer dans la section [supervisorctl] du fichier de configuraton.