Surveillance de processus .NET Core sous Linux avec Supervisor

Mise en place de Supervisor

Pour installer le gestionnaire de processus, il faut d'abord préparer l'environnement Python puis déployer l'outil.

# Installation des prérequis Python
sudo yum install -y python-setuptools
# Déploiement de Supervisor
sudo easy_install supervisor

Paramétrage global de Superviser

Une fois l'installation terminée, il est nécessaire de générer le fichier de configuration principal et de préparer la structure des dossiers.

# Création du répertoire de configuration
sudo mkdir -p /etc/supervisord.d
# Génération du fichier de base
echo_supervisord_conf | sudo tee /etc/supervisord.conf
# Initialisation du démon avec la configuration
supervisord -c /etc/supervisord.conf
# Édition du fichier pour l'inclusion dynamique
sudo vim /etc/supervisord.conf

Ajoutez la directive suivante à la fin du fichier pour qu'il prenne en compte les fichiers situés dans le répertoire dédié :

[include]
files = /etc/supervisord.d/*.ini

Déclaration de l'application .NET Core

Il faut maintenant créer un fichier spécifique pour définir comment Supervisor doit gérer notre application.

sudo vim /etc/supervisord.d/mon_api_netcore.ini

Insérez la configuration suivante dans ce fichier :

[program:mon_api_netcore]
command=/usr/bin/dotnet MonApi.dll
directory=/opt/apps/netcore_api/
environment=ASPNETCORE__ENVIRONMENT="Production"
user=www-data
stopsignal=QUIT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/supervisor/mon_api_err.log
stdout_logfile=/var/log/supervisor/mon_api_out.log

Détails des paramètres utilisés :

  • [program:mon_api_netcore] : Identifiant du processus supervisé.
  • command : Commande d'exécution de l'assembly .NET.
  • directory : Dossier de travail d'où le programme sera lancé.
  • environment : Variables d'environnement injectées au démarrage.
  • user : Utilisateur système sous lequel le processus tourne.
  • stopsignal : Signal système envoyé pour arrêter le processus (QUIT ici).
  • autostart : Lancement automatique avec Supervisor.
  • autorestart : Redémarrage automatique en cas de crash.
  • startsecs : Durée minimale de fonctionnement avant de considérer le démarrage comme réussi.
  • stderr_logfile : Emplacement des journaux d'erreurs.
  • stdout_logfile : Emplacement des journaux de sortie standard.

Après avoir sauvegardé, rechargez la configuration pour appliquer les changements :

supervisorctl reload

Activation au démarrage du système avec systemd

Pour garantir que Supervisor s'exécute dès le boot de la machine, nous devons créer une unité systemd.

sudo vim /etc/systemd/system/supervisord.service

Contenu de l'unité systemd :

[Unit]
Description=Daemon Supervisor pour la gestion des processus
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Explications des directives systemd :

  • Type=forking : Indique que le processus principal crée un fork lors de son lancement, typique pour un démon.
  • ExecStart, ExecStop, ExecReload : Commandes respectives pour démarrer, arrêter et recharger la configuration du service.
  • KillMode=process : Lors de l'arrêt de l'unité, seul le processus principal est terminé, laissatn le contrôle des sous-processus à Supervisor.
  • Restart=on-failure : Le service redémarre uniquement en cas de code de sortie anormal ou de crash.
  • RestartSec : Délai d'attente avant une tentative de redémarrage.
  • WantedBy=multi-user.target : Définit la cible d'installation pour le démarrage automatique en mode multi-utilisateurs.

Activez le service au démarrage et vérifiez son statut :

# Activation au boot
sudo systemctl enable supervisord.service
# Vérification du statut d'activation
sudo systemctl is-enabled supervisord.service

Gestion courante et diagnostic

Voici les commandes essentielles pour interagir avec Supervisor au quotidien :

# Extinction complète du superviseur
supervisorctl shutdown

# Démarrer l'ensemble des processus déclarés
supervisorctl start all

# Arrêter toutes les applications gérées
supervisorctl stop all

# Cibler une application spécifique (remplacer <app_id> par l'identifiant défini dans [program:x])
supervisorctl start <app_id>
supervisorctl stop <app_id>
supervisorctl restart <app_id>

# Consulter l'état global des tâches
supervisorctl status

# Analyser les journaux d'erreurs de l'application
tail -f /var/log/supervisor/mon_api_err.log

# Suivre les flux de sortie standard
tail -f /var/log/supervisor/mon_api_out.log

Étiquettes: .NET Core supervisor Linux systemd

Publié le 17 octobre à 14h48