Redémarrage automatique des services ayant échoué sur non-systemd
Sur les distributions Linux basées sur systemd, la gestion et le redémarrage automatiques des services après une défaillance sont relativement simples. Cependant, de nombreux systèmes Linux plus anciens ou minimaux s’appuient sur des systèmes d’initialisation alternatifs tels que SysVinit et Upstart, qui nécessitent des approches différentes pour gérer et redémarrer les services.
Dans ce guide, nous allons explorer comment redémarrer automatiquement un service ayant échoué sur des systèmes non systemd à l’aide de SysVinit et Upstart.
1. Redémarrer automatiquement les services avec SysVinit
SysVinit est l’un des plus anciens systèmes d’initialisation, couramment utilisé dans des distributions comme Debian et CentOS avant la transition vers systemd.
Étape 1 : Installer et configurer monit
Monit est un utilitaire léger et open source qui surveille les services et les redémarre automatiquement en cas de défaillance.
# On Debian/Ubuntu
sudo apt update
sudo apt install monit
On CentOS/RHEL
sudo yum install monit
Étape 2 : Configurer Monit pour superviser un service
Modifiez le fichier de configuration Monit :
sudo nano /etc/monit/monitrc
Ajoutez une définition de service :
# Example: Monitor Apache service
check process apache2 with pidfile /var/run/apache2/apache2.pid
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout
Explication de la définition du service ci-dessus :
- check process apache2 – Définit le service à surveiller.
- programme start/stop – Commandes pour démarrer et arrêter le service.
- en cas d’échec du port 80 : redémarre si le port HTTP devient inaccessible.
Ensuite, activez, démarrez et vérifiez l’état de monit.
sudo systemctl enable monit
sudo systemctl start monit
sudo monit status
2. Redémarrer automatiquement les services avec Upstart
Upstart était le système d’initialisation par défaut sur Ubuntu avant systemd, et il utilise les fichiers de configuration situés dans /etc/init/ pour définir la gestion des services.
Étape 1 : Créer un fichier de configuration Upstart
Créez une configuration Upstart personnalisée pour le service.
sudo nano /etc/init/apache2.conf
Ajoutez le contenu suivant.
# Apache service monitoring
description "Apache2 Service"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
exec /usr/sbin/apache2ctl -D FOREGROUND
Explication de la configuration ci-dessus :
- respawn – Redémarrez automatiquement le service en cas d’échec.
- limite de réapparition 10 5 – Limite les redémarrages à 10 tentatives en 5 secondes pour éviter les redémarrages excessifs.
Ensuite, activez, démarrez et gérez le service.
sudo start apache2
sudo stop apache2
sudo status apache2
Pour activer automatiquement le service au démarrage.
sudo update-rc.d apache2 defaults
3. Utilisation de Cron pour redémarrer les services manuellement
Si monit ou Upstart n’est pas disponible, une approche de secours consiste à utiliser une tâche cron pour vérifier et redémarrer périodiquement le service.
Créez un script shell.
sudo nano /usr/local/bin/check_apache.sh
Ajoutez le contenu suivant.
#!/bin/bash
if ! pgrep -x "apache2" > /dev/null
then
/etc/init.d/apache2 start
fi
Rendez le script exécutable.
sudo chmod +x /usr/local/bin/check_apache.sh
Ajoutez une tâche cron pour exécuter le script.
sudo crontab -e
Ajoutez la ligne suivante pour vérifier le service toutes les 5 minutes.
*/5 * * * * /usr/local/bin/check_apache.sh
Si vous souhaitez configurer le redémarrage automatique pour d’autres systèmes d’initialisation, consultez les articles suivants :
- Comment configurer le redémarrage automatique pour les services défaillants sur OpenRC
- Comment trouver des services en cours d’exécution sous Linux avec les commandes systemd
Conclusion
Le redémarrage automatique des services défaillants sur des systèmes non systemd nécessite un peu plus de configuration manuelle, mais des outils tels que monit, Upstart ou les scripts cron peuvent gérer efficacement les défaillances de service et assurer le bon fonctionnement de vos applications.
Si vous utilisez toujours un système non systemd, il peut être utile d’envisager une mise à niveau vers une distribution basée sur systemd pour faciliter la gestion des services.