Publié le 13 octobre 2016 - par

Watchdog pour mon Raspberry Pi

chien_de_gardeCet article à pour but de décrire les différentes étapes pour installer un watchdog sur votre Raspberry Pi. En effet il existe beaucoup d’articles (très peu en français) et certains ne fonctionnent pas (ou plus).

En d’autre termes : j’ai galéré pour l’installer, alors autant faire partager mon expérience.

Mais d’abord c’est quoi un « Watchdog » ?

 

NIVEAU_confirmé

Cliquez pour avoir la définition des niveaux.

 

C’est quoi un « Watchdog » ?

Un Watchdog : ou comme beaucoup l’auront compris un « Chien de garde ». Est un mécanisme qui permet de vérifier que votre système n’est pas défaillant. Et réagir (ou pas) s’il y a défaillance. En terme plus simple, pour notre cas, faire redémarrer automatiquement le Raspberry Pi si ce dernier est planté.

Bref lui dire « Tu te plantes, et bien redémarre tout seul !« 

Ce système, qui nous est accessible via les standards Linux va vous être décrit ci-dessous.

Je vois déjà les commentaires du genre. « Mais un Raspberry Pi, ça plante jamais… et un Linux encore moins« . Certes, mais deux raisons à cela : d’une part ce qui peut faire « planter » nos Raspberry Pi, ce sont souvent les programmes que nous avons réalisés (boucle infinie oubliée, les « stack overflow », et j’en passe…). Et d’autre part, si votre Raspberry Pi se situe au fin fond du Morvan à plus d’une heure de route et qu’il ne répond plus. Ou qu’en pleine tempête de neige votre génial portail automatique, construit à base de Raspberry Pi, vous ignore…. Vous serez bien content qu’il se soit débrouillé tout seul pour redémarrer. Et dans ce cas là un bon redémarrage ne fait pas de mal. Je pense aussi aux portiers automatiques (sonnette / interphone / ouverture gâche) de certaines immeubles qui utilisent des Raspberry Pi : Sans cette option les conséquences sont non négligeables.

 Installation du Watchdog

Là ce sont des commandes de base que vous connaissez tous, au moins pour la première :

# Installation du paquet
sudo apt-get install watchdog
# Lancement de l'application au démarrage de l'OS
sudo update-rc.d watchdog enable

Configuration du Watchdog

C’est là que cela devient compliqué. En effet le Watchdog tout seul ne fonctionne pas. Il va falloir le paramétrer.

# Installation du paquet de configuration
sudo apt-get install watchdog chkconfig
sudo chkconfig watchdog on
sudo /etc/init.d/watchdog start

Et modifier les fichiers de configuration :

sudo nano /etc/watchdog.conf

Décommenter les lignes suivantes :

watchdog-device = /dev/watchdog
interval = 4
realtime = yes
priority = 1

CTRL+X pour sortir et sauvegarder avec ‘Y’ (ou ‘O’)

sudo nano /etc/systemd/system.conf

Décommenter les lignes suivantes :

RuntimeWatchdogSec=14

CTRL+X pour sortir et sauvegarder avec ‘Y’ (ou ‘O’)

Configuration du Kernel

Non ce n’est pas un gros mot et comme vous voyez ce n’est pas fini.

Ici on va configurer le Kernel pour faire en quelque sorte une sonde qui va être exposée au Watchdog. Bref donner à manger au toutou.

Création d’un nouveau fichier

sudo nano /etc/modprobe.d/bcm2835_wdt.conf

Qui contient les lignes suivantes :

alias char-major-10-130 bcm2835_wdt
alias char-major-10-131 bcm2835_wdt

CTRL+X pour sortir et sauvegarder avec ‘Y’ (ou ‘O’)

Édition du module avec ajout de lignes :

sudo nano /etc/modules

Ajout de la ligne suivante :

bcm2835_wdt

Et lancement de notre nouvelle sonde :

sudo modprobe bcm2835_wdt
sudo service watchdog restart

Après tout cela vous aurez compris qu’un redémarrage s’impose.

 

Remarque
bcm2835_wdt  fait visiblement référence à un composant du Raspberry Pi 2 et Pi 3. Ce composant semblait être différent sur la version Pi 1 d’où mes problèmes pour trouver des tutos à jour.

Test du Watchdog

A cette étape le watchdog est donc démarré et scrute toute les 14 secondes.
Si la commande /dev/watchdog ne reçoit pas de signal au bout de 14 secondes, le Raspberry Pi redémarre.

Pour tester on va lancer un truc de hackeur pour planter notre Raspberry.

Il s’agit d’un « forkbomb« . Suite de commandes infinies qui se terminent jamais.

 :(){ :|:& };:

Personnellement j’ai lancé cette commande et il ne se passait rien alors j’ai testé, retesté etc.

En fait la commande marchait mais le Raspberry Pi est stable et ne plante pas facilement. Il fallait juste être patient. En effet il faut bien parfois jusqu’à 3 à 4 minutes avant que le « forkbomb » plante réellement le Raspberry Pi.

Ça y est vous avez votre chien de garde à l’affût d’un plantage de votre framboise préférée.

Sources

Datasheet

BCM2835

Processeur ARM

Share Button

36 réflexions au sujet de « Watchdog pour mon Raspberry Pi »

  1. guy

    j’ai des rpi avec des uptimes de plus de 18 mois, elles ne plantent jamais, mais parfois certains script pyton son arrêtés alors que lancé depuis des mois… un watchdog qui surveille certain scripts-programmes cela existe ?

    Répondre
      1. guy

        Monit peu surveiller des services lancé en Daemon, mais pour vérifier l’exécution de simples scripts python je ne pense pas qu’il soit l logiciel qu’il me faille.

        Répondre
      1. caron

        Mon tuto est un peu différent du tien. Je regarderai à l’occasion les différences.
        Encore bravo.
        Je suis sur plusieurs sujets en même temps alors pas facile…Bref, la technique et l’informatique sont des puits sans fond :).
        Encore bravo pour tes supers articles et tes passions que tu nous partages.
        amicalement
        Christophe

        Répondre
  2. Pascal

    Bonjour!

    Ahah il tombe à pic votre tuto! Ca fait des mois que j’ai un réveil qui se connecte à mon planning irrégulier afin de régler l’heure du lever, et ce matin grasse matinée le Rasp était planté!
    J’ai pas eu même le temps de réfléchir à une solution, qu’elle me vient toute seule 🙂
    Merci pour ce blog!!

    Répondre
  3. j2c

    Si j’ai bien compris, il s’agit d’un watchdog logiciel ?

    J’avais codé un truc à l’époque qui vérifiait la connectivité réseau : si elle a disparu => reboot. Mon raspberry1 avait tendance à perdre le réseau quand il y avait un peu trop de trafic, ou que l’usb était solicité (même à travers un hub actif).

    Je suis à la recherche d’un watchdog matériel sur le rasp.. c’est à dire qu’il faire un reset si l’OS embarqué ne vient plus reset le watchdog à intervale régulier (ce qui arrive quand on plante le raspberry suite à une surchauffe.) .. Mon PABX avait un uptime de quelques jours avant de se planter : le CPU atteignait 90°C .. il a même réussi à faire fondre le patch qui servait à coler un radiateur => ça a risqué de ruiner le rasp par court-circuit suite à une chute de ce dernier sur la carte.. (c’est du cuivre), j’ai eut de la chance.

    Répondre
      1. msg

        A l’époque , j’avais fait un Watchdog avec un circuit intégré 4538 .
        Il s’agit d’un double circuit base de temps par défaut retriggable (idéal pour le watchdog) mais qui peut être configurée indivifuellement en non retriggable pour en faire une minuterie qui par execmple servira à définir la durée du reset .

        Le réglage du temps est très simple T = R C .
        Pour C de 100 µF et R de 10 KΩ donne 1 seconde .
        Avec R de 100 KΩ donne 10 secondes.
        Il suffit de mettre en série les résistances adéquates pour ajuster ce temps .

        Les entrées des signaux de déclenchement peuvent être choisi librement et individuellement sur front montant ou descendent .

        Répondre
          1. msg

            Pas besoin de schéma , je l’ai dans un coin de la tête .
            il me suffit de relire le Datasheet du circuit et ça va vite me revenir .

            Le Watchdog que j’utilisais , pour le premier temporisateur , servait de base de temps au microcontrôleur pour définir un fonctionnement normal avant anti-bavard et le second temporisateur comme protection générale des équipements (coupure alim)
            Le Microcontrôleur n’était pas mis en Reset car il devait , dans la mesure du possible , toujours répondre à des commandes DTMF .

            Si tu veux d’un Watchdog avec Reset , je peux te le faire .
            Les deux temporisateurs du 4538 s’activent en boucle mutuellement .

            Je te met ça sur le Forum dès que possible !?

      1. François MOCQ

        je me suis mal exprimé… je pensais à un montage externe qui reçoit des pulses réguliers du GPIO et qui déclenche un reset lorsque les impulsions sont absentes pendant un temps donné.
        C’est ce qui est intégré au BCM2708 sans doute sous forme d’un timer qu’on réarme mais on n’a pas beaucoup d’infos dessus 🙁

        Répondre
  4. fpivart

    Whaouu !
    A peine mis un article et une multitudes de réponses que je viens seulement de consulter.
    Je viens de lire l’article de Caron. Il est visiblement assez similaire. Je ne l’avais pas trouvé celui là quand j’avais fait pourtant mes nombreuses rechercher. Marrant j’ai failli mettre la même image de début. Mais François M m’en a proposé une qu’il a faite lui même…. y sais tout faire.
    Quand au BCM2708 il a visiblement bien un watchdog hard intégré. Je rajoute les datasheet dans l’article.
    Pour ceux qui ont le temps de se faire des noeuds au cerveau.
    Mais je pense qu’on doit les trouvés déjà sur Framboise 314.

    Répondre
  5. Christian

    Excellent article – comme d’habitude. Merci en passant pour votre site. Je m’y réfère souvent.
    Pour ma part, je cherche à surveiller un tunnel VPN installé sur le PI qui va se trouver au fond des bois relié à internet uniquement par un dongle GSM.
    Si le tunnel tombe, je n’ai plus d’accès au PI. Peut-on imaginer surveiller le tunnel avec le watchdog ? Et que si le tunnel tombe du côté du PI bien sûr le watchdog relance le PI ?
    Merci pour votre aide.

    Répondre
  6. Thierry

    Bonjour,
    Et merci pour le temps pris pour rédiger des pages claires et utiles. Je partage l’avis qu’un wathdog intégré dans l’OS n’est pas forcément suffisant.
    J’ai plusieurs RPI (0/2/3) qui tourne soit au bureau (serveur NTP pour mes PABX) soit chez moi (station météo). A plusieurs reprises, j’ai constaté un plantage de mes scripts python mais l’OS tournait très bien. Dans ce cas, le WD n’aurait rien vu.
    Quand je développe sur des microcontroleurs type PIC16 ou PIC32 directement en C (sans OS), j’utilise le WD hard qui est intégré dans le PIC. La seule contrainte, régulièrement dans le programme il faut ajouter une instruction de remise à zéro du WG, si le programme plante ou est trop ralenti, le WD n’étant plus remis à zéro se déclenche et le reboot est lancé.
    Si le BCM2708 est un WD hard, alors il doit y avoir une façon de le RAZ via Python afin de surveiller aussi le bon fonctionnement du script.
    Je ne connais pas assez le Rpi pour en débattre mais je vais prendre un peu de temps pour lire les datasheets.

    Répondre
  7. Frédéric

    Bonjour,
    Merci pour ce tuto, c’est vraiment sympa de trouver un tel travail partagé.
    Cependant j’ai du mal à mettre en œuvre le watchdog car il me manque le fichier system.conf dans /etc/systemd. J’ai du mal à trouver de l’info sur son absence dans mon raspbian.
    Merci.
    Frédéric.

    Répondre
  8. Frédéric

    Bonjour,
    en fait je ne sais pas trop, uname -a me donne :
    Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux
    Merci.
    Frédéric

    Répondre
          1. Frédéric

            Merci pour le fichier, effectivement ça ne marche pas. Je vais voir à changer de version.
            Merci beaucoup pour votre temps.
            Cordialement,
            Frédéric.

  9. Stéphane Louise

    Merci pour le tuto. C’est impécable avec mon Rpi3 qui sert aussi de serveur Domoticz (sous Raspbian Jessie).
    La plupart des tuto sont pour le Rpi 1, et ne marchent pas car les modules ont changé.
    Merci encore.

    Stéphane

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.