CRON reboot service si le ping est down

Sous Debian 12, il n’est pas possible de configurer directement un cron pour exécuter une tâche toutes les 15 secondes, car cron ne permet de définir que des intervalles minimum d’une minute. Cependant, il est possible de contourner cette limitation en utilisant un script shell qui va faire un ping toutes les 15 secondes en boucle et qui redémarrera le service réseau si le ping échoue.

Voici la procédure et le script à suivre pour configurer cette tâche :

Étape 1 : Créer un script shell

  1. Créez un fichier script, par exemple ping_network.sh, dans un répertoire de votre choix, par exemple /home/utilisateur/.

nano /home/utilisateur/ping_network.sh

  1. Ajoutez le code suivant dans ce fichier :

#!/bin/bash

# Adresse IP ou domaine à pinger (ex : google.com)
PING_TARGET=”8.8.8.8″

# Effectuer un ping toutes les 15 secondes
while true; do
    # Effectuer le ping
    if ! ping -c 1 $PING_TARGET > /dev/null 2>&1; then
        # Si le ping échoue, redémarrer le service réseau
        echo “Ping échoué ! Redémarrage du service réseau…”
        systemctl restart networking
    fi
    # Attendre 15 secondes avant de recommencer
    sleep 15
done

  1. Sauvegardez et quittez l’éditeur (Ctrl + O, Enter, Ctrl + X).
  2. Rendre ce script exécutable :

chmod +x /home/utilisateur/ping_network.sh

Étape 2 : Ajouter une tâche cron pour exécuter le script au démarrage

  1. Ouvrez l’éditeur de cron pour votre utilisateur :

crontab -e

  1. Ajoutez cette ligne pour exécuter le script au démarrage du système (cela permet de lancer le script au démarrage, ce qui est nécessaire pour qu’il fonctionne en continu) :

@reboot /home/utilisateur/ping_network.sh &

Cette ligne va exécuter le script en arrière-plan à chaque démarrage du système.

  1. Sauvegardez et quittez l’éditeur (Ctrl + O, Enter, Ctrl + X).

Étape 3 : Tester

  1. Redémarrez votre système pour vérifier que le script se lance bien et fonctionne comme prévu :

sudo reboot

Le script effectuera un ping toutes les 15 secondes et redémarrera le service réseau en cas d’échec du ping.

Explication

  • Le script utilise la commande ping pour tester la connectivité réseau. Si le ping échoue (aucune réponse), la commande systemctl restart networking est exécutée pour redémarrer le service réseau.
  • Le sleep 15 permet de temporiser chaque exécution pour un intervalle de 15 secondes entre chaque ping.
  • La tâche cron au démarrage (@reboot) permet de lancer le script automatiquement lorsque le système démarre.
Updated on 15 May 2025