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.

 [stextbox id= »info » caption= »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.[/stextbox]

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

52 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 !?

            Répondre
      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.

            Répondre
  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
  10. Laurent

    Salut François-Paul,

    Merci pour ton article, je viens de le mettre en oeuvre pour un PI3 Domoticz. Celui a déjà été bloqué dans le passé vu les scripts de scan BT/Wifi pas surper durcis 😉

    Bonne fêtes,
    Laurent

    Répondre
  11. jefzinho

    bonjour et merci pour ces post de grande qualité et très utiles
    je viens de dérouler le tuto et… ça fonctionne impeccablement ! Il faut en effet attendre quelques minutes avant le reboot.
    J’ai juste rencontré un bête problème d’affichage : selon la taille d’affichage de mon écran l’underscore disparaît (ajouter une ligne vide après tous les exemples de code ?)
    ça affichait « bcm2835 wdt » au lieu de « bcm2835_wdt » (certes la correction est évidente quand on comprend chaque instruction ce qui malheureusement n’est pas encore mon cas 🙂
    merci encore et bonne année !
    ps : la syntaxe de la forkbomb ne fonctionnait pas, à cause du & je présume, c’est bien un & qu’il faut : :(){ :|: & };: (ça ça marche très bien 😉

    Répondre
    1. François-Paul Ivart Auteur de l’article

      Bonjour,
      Merci pour ce retour. Effectivement pour le forkbomb il faut que je retest. Je ne sais plus trop ce que j’avais mis et l’affichage à dû rajouter les fameux « amp ». Je vérifie et met à jour le tuto.
      Meilleurs Voeux à vous également.
      François-Paul

      Répondre
  12. baba

    C’est relou le temps dépassé pour écrire un message.

    Merci pour l’article. J’ai réussi du premier coup.

    Mais j’ai trouver que le raspberry redémarrai souvent. Je suis ça de près.
    J’ai rajouter ça dans le /etc/rc.local

    laDate=date +%Y-%m-%d
    laHeure=date +%H-%M-%S

    echo « $laDate $laHeure » >> /home/pi/logredemarragePI.txt

    Comme ça j’aurai une trace.

    Merci à vous.

    Répondre
    1. baba

      Voilà mon log pour 7 jours.
      Les 3 premiers chiffre date et les 3 dernière l’heure.

      2017-06-03 08-21-55
      2017-06-03 12-17-04
      2017-06-03 15-17-04
      2017-06-03 18-17-07
      2017-06-03 20-17-04
      2017-06-03 23-17-04
      2017-06-04 02-17-04
      2017-06-04 05-17-04
      2017-06-04 08-17-04
      2017-06-04 11-17-19
      2017-06-04 13-17-04
      2017-06-04 16-17-04
      2017-06-04 19-17-06
      2017-06-05 16-17-07
      2017-06-05 18-17-04
      2017-06-05 21-17-04
      2017-06-06 00-17-04
      2017-06-06 03-17-04
      2017-06-06 06-17-04
      2017-06-06 09-17-04
      2017-06-06 12-17-05
      2017-06-06 15-17-06
      2017-06-06 18-17-04
      2017-06-06 21-17-16
      2017-06-07 00-17-05
      2017-06-07 03-17-14
      2017-06-07 05-17-04
      2017-06-07 08-17-04
      2017-06-07 11-17-04
      2017-06-07 13-17-04
      2017-06-07 17-17-08
      2017-06-07 19-17-04
      2017-06-07 22-17-04
      2017-06-08 01-17-07
      2017-06-08 03-17-05
      2017-06-08 06-17-04
      2017-06-08 09-17-04
      2017-06-08 12-17-04
      2017-06-08 15-17-04
      2017-06-08 18-17-16
      2017-06-08 21-17-04
      2017-06-08 23-17-04
      2017-06-09 02-17-04
      2017-06-09 05-17-04
      2017-06-09 08-17-04
      2017-06-09 11-17-05
      2017-06-09 14-17-08
      2017-06-09 16-17-04
      2017-06-09 19-17-04
      2017-06-09 22-17-04
      2017-06-10 01-17-04
      2017-06-10 04-17-04
      2017-06-10 07-17-10
      2017-06-10 09-17-04

      Répondre
  13. François

    Bonjour,
    Je suis débutant en la matière et j’aurais besoin d’un conseil.
    Je voudrais faire tourner un script python sur mon raspi 3, mais ce script ne peut pas s’arrêter. J’ai donc fait quelques recherches pour un watchdog et je suis tombé sur cet article.
    Ce watchdog est exactement ce dont j’ai besoin cependant je voudrais faire en sorte que ce soit mon script python qui « alimente » le watchdog.
    Si j’ai bien compris, il faut exécuter /dev/watchdog pour « alimenter » le watchdog. Je voudrais que ce soit uniquement mon script python qui effectue cette action. Comme ça si le script plante, le raspi redémarre tout seul. (Et je ferai en sorte que mon script se lance au démarrage).
    J’espère avoir été assez clair dans mes explications …
    Pourriez-vous me guider pour effectuer cette modification ?
    Merci d’avance et merci pour toute cette mine d’informations !!!

    Répondre
  14. david

    Le circuit intégré dallas DS1232LP/LPS est très bien pour un watch hard.
    Perso, je pense l’utiliser de nouveau dans un pg de gestion aquarium.
    Il est a noter que le pg de gestion du shutdown (thread en // pg principal)
    recevra aussi, je pense, la tension avant mon convertisseur DC/DC d’alim.
    Cela dans certains cas me laissera un délais, peut être, pour envoyer un SMS…..

    Répondre
    1. gipet

      Salut
      pour moi cela fonctionne avec un Raspberry Pi 3 Model B Rev 1.2 (cat /proc/cpuinfo)
      serveur domoticz : 3 solutions que j’ai mis en place suite la mise à jour de 04-2020
      reset automatique pi si pb OS
      reset automatique service web domoticz si plantage domoticz (restart)
      reset manuel distant via sonoff sur alim si cela est nécessaire

      Répondre
  15. eric

    Bonjour

    Une idée sur ce problème Merci

    RPI3

     

    pi@raspberrypi:~ $ sudo modprobe bcm2835_wdt
    libkmod: ERROR ../libkmod/libkmod-config.c:656 kmod_config_parse: /etc/modprobe.d/bcm2835_wdt.conf line 1: ignoring bad line starting with ‘alias’
    libkmod: ERROR ../libkmod/libkmod-config.c:656 kmod_config_parse: /etc/modprobe.d/bcm2835_wdt.conf line 2: ignoring bad line starting with ‘alias’

     

    cat /proc/cpuinfo

    Hardware : BCM2835
    Revision : a02082
    Serial : 000000005239792d
    Model : Raspberry Pi 3 Model B Rev 1.2

    Répondre
  16. Olivier

    « 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. »

    Il y a pas une erreur là? 2835 est justement ce qui équipe le Pi 1 alors que les Pi2 et 3, eux renferme un 2836 et 2837. Donc j’imagine qu’il y a eu une inversion là. Non?

    Olivier

    Répondre

Laisser un commentaire

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

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.