Cet 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 » ?
Au sommaire :
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
- http://www.switchdoc.com/2014/11/reliable-projects-using-internal-watchdog-timer-raspberry-pi/ (avec bcm_2708)
- http://binerry.de/post/28263824530/raspberry-pi-watchdog-timer
- http://www.megaleecher.net/Watchdog_for_Raspberry_Pi#axzz4MyO5x2gT
- http://www.domoticz.com/wiki/Setting_up_the_raspberry_pi_watchdog
- https://github.com/notro/rpi-firmware/wiki/BCM2708vsBCM2835
Datasheet
BCM2835
- https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
- http://elinux.org/BCM2835_datasheet_errata
Lol, en lisant Watchdog, j’ai pensé a Watch_Dogs … le jeu vidéo :p
😀 non non, celui là ne veille que sur le Raspberry Pi
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 ?
Oui cela s’appelle monit: https://doc.ubuntu-fr.org/monit
Suis dispo sur twitter si tu veux plus de détails
PS : une adresse mail avec un + dedans est tt à fait valide.
J’ai donc été obligé d’en mettre une fausse.
merci pour la réponse et désolé pour l’anti-spam qui est agressif mais le site a été hacké l’an passé et il a fallu durcir le filtrage
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.
hello,
J’ai rédigé il y a quelques temps un article sur le sujet avec un RPI3 et Jessie.
Voici le lien http://caron.ws/?cartes-a-microcontroleur=chien-de-garde-watchdog-jessie-64-fr
Cordialement
Christophe
Bonjour Christophe
merci pour le lien 🙂
cordialement
François
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
je n’y suis pour rien 🙂 c’est François Paul qui inaugure sa participation à framboise314 avec cet article.
Oh! un article à jour et en français !
merci !
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!!
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.
bonjour
merci pour ce retour
effectivement ça chauffe !
je n’ai pas de watchdog hard mais si j’en trouve un il sera ajouté dans les articles du blog…
cordialement
François
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 .
bonjour msg
bon… bin y’a plus qu’à retrouver le schéma 😛
cordialement
François
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 !?
Voilà , c’est fait ici , mais j’ai un souci pour ajouter mes schémas .
http://forums.framboise314.fr/viewtopic.php?f=36&t=3067&p=19079#p19079
bonsoir msg
je vais regarder ça des que je peux
@ bientôt
francois
au contraire, je pense qu’il s’agit bien d’un watchdog hardware, contenu dans le SoC Broadcom.
La présence du driver bcm2835_wdt (et son code source vite lu ici http://lxr.free-electrons.com/source/drivers/watchdog/bcm2835_wdt.c) a bien l’air de montrer qu’on parle d’une composant intégré au SoC.
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 🙁
Tiens ça me donne une idée d’article à te proposer : un watchdog hardware à base de attiny85 par exemple 🙂
pourquoi pas ? je suis sûr qu’il y aura des personnes intéressées par ce projet 🙂
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.
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.
Bonjour Christian
merci 🙂
je ne pense pas que le watchdog fasse l’affaire dans votre cas.
Bon, il redémarrera le RasPi en cas de plantage et ça peut être utile
mais il ne surveille pas le réseau
je penserai plutôt à quelque chose comme ça http://domopi.eu/reconnecter-automatiquement-votre-raspberry-pi-au-wifi/
test du réseau et reconnexion en cas de coupure, à adapter à votre cas
bonne journée
cordialement
François
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.
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.
bonjour Frederic
vous êtes sous Raspbian Jessie ?
cordialement
François
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
on est en 4.4. 26 -v7+ actuellement
si vous n’avez rien de particulier à récupérer sur la carte SD vous pourriez essayer de repartir d’une distrib récente ?
mince … ça me tente pas ?
C’est ce qui explique l’absence de mon fichier ?
je ne sais pas je n’ai pas la correspondance des versions sous la main
a la limite je peux vous l envoyer mais pas sur que ça résolve le problème…
Je fais un essai et je vous dis.
Merci pour le fichier, effectivement ça ne marche pas. Je vais voir à changer de version.
Merci beaucoup pour votre temps.
Cordialement,
Frédéric.
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
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
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 😉
bonjour
merci pour le retour
bonnes fêtes de fin d’année
cordialement
François
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
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.
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
Bonjour
Merci pour cet excellent tuto
As tu eu l’occasion de le tester sur le Pi Zero W (SoC: Broadcom BCM2835) ?
Merci
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 !!!
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…..
Si somme moi, vous n’arrivez pas à activer le watchdog, voici un thread de raspberry.org qui m’a personnellement débloqué : https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501
Visiblement il y a pas mal de changements sur ce module, il faudrait peut être éditer l’article pour le mettre à jour …
merci pour cette info, Rémi
MERCI !
Tes posts son d’une grande aide pour configurer les raspberry
Bonjour,
J’arrive après la bataille, mais… Est-ce que ce tuto est fonctionnel avec un des nouveau 3B+ ?
Merci 🙂
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
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
« 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
Ping : Utiliser le Watchdog (chien de garde) du Raspberry Pi - Framboise 314, le Raspberry Pi à la sauce française....