Recherche de site Web

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.

Articles connexes: