Publié le 25 août 2024 - par

Utiliser le Watchdog (chien de garde) du Raspberry Pi

Il y a 8 ans… déjà je vous avais proposé un article pour installer un WATCHDOG (Chien de garde) sur votre Raspberry Pi. Il est peut être temps de remettre ça à jour… Je vous propose cet article qui est une synthèse d’articles dont la référence est dans les sources, en bas de l’article. Vous pourrez ainsi voir l’original [en Anglais]. Les différentes solutions ont été testées.

Utiliser le Watchdog (chien de garde) du Raspberry Pi

Matériel Utilisé

  • Raspberry Pi 5 4Go RAM + boîtier officiel avec ventilateur
  • Carte µSD 16Go
  • Raspberry Pi OS Bookworm à jour à la date de l’article (08/2024)
  • Clavier/souris

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, est accessible via les mécanismes standards de Linux.

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.

Comment tester le WatchDog ?

On peut « planter » le Raspberry Pi de plusieurs façons, en voici deux qui seront des bons tests pour le watchdog.

Méthode Kernel Panic

Avant de mettre le WatchDog en place je vous propose de voir comment on pourrait le tester. Sinon vous pourriez mettre le bazar en place et… s’il ne fonctionne pas il ne servirait à rien 😀

On peut créer un Kernel Panic ! Cette alerte signale toutes des erreurs impossibles à corriger ou à ignorer et qui interdisent la poursuite du fonctionnement normal de l’ordinateur. Le système s’arrête pour éviter tout dégât supplémentaire.

On peut déclencher manuellement un Kernel Panic avec la commande  :

echo c > /proc/sysrq-trigger

Le c dans la commande echo c > /proc/sysrq-trigger est un raccourci pour “crash”. Il indique au noyau de provoquer un kernel panic intentionnellement. Cette commande est souvent utilisée pour tester les mécanismes de récupération du système ou pour générer des dumps de mémoire pour le débogage.

Pour exécuter cette commande il faut être root. Passez en root avec la commande

sudo su –

Pour sortir de ce mode root utilisez exit. Attention si vous lancez la commande pour provoquer un Kernel Panic sans avoir installé de watch dog… la seule solution est un reset hard ou une coupure de l’alimentation!

Méthode Fork Bomb

Présentation de la fork bomb

La fork bomb est une forme d’attaque par déni de service (DoS) contre un système Linux ou Unix. Elle utilise l’opération fork. La fonction :(){ :|:& }; : n’est rien d’autre qu’une fonction bash. Cette fonction est exécutée de manière récursive. Elle est souvent utilisée par un administrateur système pour tester les limites de processus de l’utilisateur sur le serveur. Les limites de processus Linux peuvent être configurées via /etc/security/limits.conf et PAM pour éviter la bombe bash fork(). Une fois fork bomb activée dans un système, il est souvent impossible de reprendre un fonctionnement normal sans redémarrer le système, car la seule solution pour arrêter la fork bomb, c’est de détruire toutes les instances de celle-ci.

La fork bomb est simplement une suite de caractères qui peut sembler bizarre mais représente en réalité un programme bash. Une fois lancé elle va bloquer le Raspberry Pi et le watchdog va redémarrer la machine (Presque 2 minutes sur un Pi 5 avec 4Go de RAM).

Pour lancer la fork bomb il suffit de rentrer ce code sur la ligne de commande :

:(){ :|:& };:

Plus d’infos dur la fork bomb

La  fork() bomb est définie comme suit :

:(){
:|:&
}; :

:()
Définit la fonction appelée :   . Cette fonction n’accepte aucun argument. La syntaxe des fonctions bash est la suivante :

😐 :

Ensuite la fonction s’appelle elle-même en utilisant une technique de programmation appelée récursivité et envoie la sortie vers un autre appel de la fonction ‘:‘. Le pire est que la fonction est appelée deux fois pour bombarder votre système.

&

Place l’appel de la fonction en arrière-plan afin que l’enfant ne puisse pas mourir et commence à manger les ressources du système.

;

Termine la définition de la fonction.

La fonction est appelée (exécutée) et la bombe fork() est activée.
La voici sous forme d’un code plus lisible :

Nota : sur un Linux bien configuré, on peut éviter que la fork bomb bloque le system

Activer le WatchDog – Méthode 1

systemd fait partie intégrante du système d’exploitation du Raspberry Pi, on peut passer par ce mécanisme pour activer un WatchDog.

Ouvrez le fichier  system.conf avec nano :

sudo nano /etc/systemd/system.conf

Ajoutez les deux lignes suivantes à la fin du fichier :

RuntimeWatchdogSec=15
RebootWatchdogSec=2min

Après avoir apporté des modifications à la configuration de systemd, vous pouvez sauvegarder et quitter en appuyant sur CTRL + X, suivi de Y ou O, puis de la touche ENTER.

Mais que veulent dire ces lignes ?

RuntimeWatchdogSec  : Cette valeur est utilisée pour indiquer au WatchDog le temps qu’il doit attendre avant de réinitialiser votre Raspberry Pi.
En raison des limitations du Pi, cette valeur a une durée maximale de 15 secondes. Cela signifie que lorsqu’il est réglé sur 15, le Raspberry Pi sera réinitialisé si le Watchdog ne reçoit pas de message pendant 15 secondes.
RebootWatchdogSec : Cette valeur s’adresse au chien de garde du reboot et vous permet de déterminer combien de temps votre Raspberry Pi doit attendre la fin d’un redémarrage. S’il reste bloqué plus longtemps que le temps spécifié (2 minutes), le chien de garde forcera une nouvelle réinitialisation.

En activant le WatchDog sur le Raspberry Pi, nous avons apporté des modifications à la configuration de systemd. Pour que ces changements prennent effet, il faut redémarrer le démon systemd en exécutant la commande ci-dessous.

sudo systemctl daemon-reload

On peut aussi redémarrer complètement le système à l’aide de la commande

sudo reboot

Si vous avez opté pour cette méthode il n’y a plus rien à faire. De mon côté pour installer la Méthode 2, je vais supprimer les modifications dans le fichier system.conf pour pouvoir continuer…

Activer le WatchDog – Méthode 2

Cette deuxième méthode suppose que vous n’avez pas appliqué la méthode 1, ou alors si vous l’avez appliquée, vous devrez supprimer les deux lignes ajoutées dans system.conf.

Vérifiez d’abord que votre système est à jour

Ajoutez le watchdog dans config.txt

Ajoutez le watchdog à config.txt :

sudo nano /boot/firmware/config.txt

et ajoutez tout à la fin :

dtoverlay=watchdog

Sauvegardez avec CTRL X  et Y ou O  pour enregistrer.

Installer le démon WatchDog

Dans une fenêtre de terminal, saisissez la ligne suivante pour installer le démon :

sudo apt install watchdog

Lorsque l’installation est terminée, configurez le démon du watchdog

Configurer le démon du WatchDog

Ouvrez le fichier de configuration avec nano pour le modifier

sudo nano /etc/watchdog.conf

Décommentez (enlevez le # au début) ou ajoutez ces lignes si elles n’existent pas :

watchdog-device = /dev/watchdog
max-load-1 = 24

La valeur max-load-1 définit la charge moyenne du système sur une minute au-delà de laquelle le watchdog redémarrera le système. Une valeur de 24 est trop élevée pour un Raspberry Pi avec seulement 4 cœurs. Une valeur plus raisonnable pourrait être autour de 4 à 6, ce qui correspondrait à une charge moyenne de 1 à 1,5 par cœur

Vous pouvez tester des valeurs entre 4 et 6 par exemple. Ici j’ai mis 5.
Sauvegardez avec CTRL X  et Y ou O  pour enregistrer.

Activer le chien de garde

Activez et démarrez le service watchdog :

sudo systemctl enable watchdog
sudo systemctl start watchdog

Il ne reste plus qu’à tester comme ci-dessus en devenant root puis en lançant
echo c > /proc/sysrq-trigger

Au bout de quelques secondes le Raspberry Pi redémarre.

Les autres paramètres

watchdog.conf permet de régler d’autres paramètres. Je ne les ai pas testés, je vous laisse RTFM lire la documentation et jouer avec ces paramètres.. Voici les principaux paramètres qui peuvent vous intéresser.

interval
– Définissez l’intervalle de vérification du watchdog. Une valeur courante est de 10 secondes :
     interval = 10

realtime et priority
– Si vous avez des processus critiques en temps réel, vous pouvez définir ces paramètres pour donner la priorité au watchdog :
realtime = yes
priority = 1

ping
– Pour surveiller la connectivité réseau, vous pouvez ajouter des adresses IP à pinger et dans les paramètres suivants le nombre de pings et l’interface… :
ping = 8.8.8.8
ping = 8.8.4.4

Vous pouvez aussi lancer vos propres tests

repair-binary et test-binary
– Si vous avez des scripts de réparation ou de test, vous pouvez les définir ici :
repair-binary = /usr/sbin/repair_script
test-binary = /usr/sbin/test_script

N’hésitez pas à explorer le fichier de conf qui comporte énormément de possibilités (surveiller la température, la mémoire disponible…). Après avoir ajusté ces paramètres, n’oubliez pas de redémarrer le service watchdog pour appliquer les modifications :

sudo systemctl restart watchdog

Ces ajustements devraient vous aider à optimiser le fonctionnement du watchdog sur votre Raspberry Pi sous Bookworm.

Conclusion

Le watchdog peut être un dispositif physique, on a connu des timers (avec un 555 !) qui étaient réarmés par une sortie (GPIO) d’un système informatique. En cas de défaillance ou de plantage du système informatique, le timer n’était plus réarmé et un relais ou un transistor effectuaient un reset du système.

Dans le Raspberry Pi (et les systèmes récents), le watchdog a été intégré au CPU et une configuration suffit à le mettre en route et à le paramétrer.

J’espère que cet article vous permettra de découvrir et de mettre en œuvre le watchdog. Je pense à ceux qui gèrent des Raspberry Pi « isolés » comme les relais radioamateurs sur un point haut, difficilement accessibles (surtout en hiver) ou aux Raspberry Pi WebSDR situés en haut d’un pylône. Vous me direz dans ce cas il suffit de couper le courant, mais c’est mieux si le système s’autosurveille et redémarre tout seul en cas de problème… On pourrait ajouter la domotique, les dashboards d’entreprise, les stations météo, les systèmes de surveillance avec caméra etc…
Si vous trouvez une application à cet article, n’hésitez pas à mettre un commentaire ci-dessous !

Sources

https://pimylifeup.com/raspberry-pi-watchdog/

How to Set Up a Watchdog Timer on Raspberry Pi (fleetstack.io)

https://manpages.debian.org/testing/watchdog/watchdog.conf.5.en.html

https://www.cyberciti.biz/faq/understanding-bash-fork-bomb/

https://raspberrypi.stackexchange.com/questions/137527/how-to-configure-the-watchdog

 

 

 

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

5 réflexions au sujet de « Utiliser le Watchdog (chien de garde) du Raspberry Pi »

  1. Ping : Utiliser le Watchdog (chien de garde) du Raspberry Pi

  2. Flubb

    Très intéressant.

    Et très facile à utiliser.

    Petite question : quelle serait la « mécanique » du watchdog embarqué sur le Pi ? Un petit bout de processeur qui monitore ce dernier ? Un circuit séparé ?

    Je vais aller voir la doc 🙂

    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.