Configuration de Supervisor sur CentOS et résolution des erreurs de socket

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 :

  1. Le démon n'est pas lancé : Si supervisord n'est pas actif, le fichier .sock n'est pas créé.
    Solution : supervisord -c /etc/supervisor/supervisord.conf
  2. Incohérence de chemin : Le chemin défini dans [unix_http_server] diffère de celui dans [supervisorctl].
    Solution : Vérifiez que la directive serverurl pointe exactement vers le même fichier .sock que la section serveur.
  3. 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.

Étiquettes: supervisor CentOS Linux process-management devops

Publié le 11 juin à 01h21