Redémarrer automatiquement un mini-PC planté

Redémarrer automatiquement un mini-PC planté

Avec l'arrivée des mini-PC bon marché basés sur les processeurs ARM, de nombreuses applications d'automatisation et de domotique sont devenues accessibles à tout un chacun. Il y a toutefois un hic, ces mini-PC bon-marché ont souvent des problèmes de fiabilité. Au point qu'il est difficile de les utiliser dans des applications qui doivent tourner sans supervision. Aujourd'hui, nous proposons un produit qui apporte une solution à ce problème: le Yocto-WatchdogDC.



Imaginez que vous ayez installé une station météo de votre fabrication sur une île déserte... Vous n'avez pas spécialement envie qu'elle s'arrête une fois rentré chez vous, sachant qu'il n'y aura personne pour aller la relancer.

Si vous installez une station météo sur une île déserte, vous ne pourrez pas aller la rebooter tous les deux jours
Si vous installez une station météo sur une île déserte, vous ne pourrez pas aller la rebooter tous les deux jours


A priori, la solution idéale à tout problème de fiabilité est de le régler à la source: corriger les instabilités. Malheureusement, ce n'est pas toujours possible. Les instabilités sont souvent causées par la conjonction de facteurs peu reproductibles, liés à des choix matériels qui ne peuvent pas être corrigés après coup. Dans la plupart des cas, il n'y a pas derrière ces machines bon marché un support technique digne de ce nom: soit le fabricant est inconnu, soit il ne fournit que le strict minimum en terme de support logiciel. Dans le meilleur des cas, c'est la communauté d'utilisateurs qui cherche à trouver une solution de son mieux. Le Raspberry Pi est un cas typique, avec une large communauté qui travaille à contourner les nombreuses limitations du système.

Alors lorsqu'une instabilité est incontournable, ou lorsque deux précautions valent mieux qu'une, une des solutions consiste à ajouter un watchdog, c'est à dire une surveillance de fonctionnement automatique.

schéma de branchement d'un watchdog
schéma de branchement d'un watchdog



Le principe est simple: un watchdog est une sorte de minuterie branchée entre l'alimentation et le PC lui-même. Tant que le PC fonctionne correctement, un logiciel va réarmer la minuterie à intervalle régulier. Si le logiciel se bloque ou que le PC cesse de fonctionner, la minuterie ne sera pas réarmée et la sécurité va se déclencher: le PC va être éteint puis rallumé quelques secondes plus tard.

Le Yocto-Watchdog, il peut sauver votre installation
Le Yocto-Watchdog, il peut sauver votre installation



Il faut bien entendu garder cette commutation comme un dernier recours, éteindre et rallumer une machine peut avoir des conséquences funestes pour son filesystem. Par conséquent, le logiciel qui réarme la minuterie devrait commencer par essayer de redémarrer le PC par logiciel. Mais dans les cas où le WiFi ou l'USB cesse de fonctionner par exemple, la coupure d'alimentation est souvent la seule solution.

Un exemple concret

Voyons par exemple comment ajouter un peu de robustesse à un MK805 (ou Mini-X), notoirement connu pour
1. ne pas toujours démarrer lors de la mise sous tension
2. perdre occasionnellement la connection WiFi

Commençons par une solution simple, sans écrire une seule ligne de code.

Vous trouverez dans les librairies Yoctopuce une version qui fonctionne en ligne de commande. Le code source est disponible, mais vous trouverez aussi directement les binaires pour les OS les plus courants, dont Linux/ARM que nous utilisons pour le MK805 (architecture armel). Parmi eux, le programme YWatchdog permet de piloter le Yocto-WatchdogDC.

La commande suivante permet de lancer la surveillance par le watchdog, avec un redémarrage automatique après 120 secondes sans signe de vie:

./YWatchdog any set_triggerDelay 120000
./YWatchdog any set_running ON


(note: cette configuration peut aussi être faite avec une interface graphique en utilisant le VirtualHub, si vous le préférez)

Le petit script suivant, que nous sauverons sous /root/keep-alive.sh permettra de confirmer le bon fonctionnement de la machine:

#!/bin/bash /root/YWatchdog any resetWatchdog



Il suffit alors d'ajouter dans la crontab du système un appel au script ci-dessus à chaque minute, en tapant:

sudo crontab -e


et en ajoutant la ligne suivante dans l'éditeur crontab:

* * * * * /bin/bash /root/check-alive.sh



A partir de là, le système ira automatiquement confirmer qu'il est en vie chaque minute, et le watchdog le redémarrera après deux minutes si cela ne se produit pas.

Si on veut maintenant vérifier que le WiFi fonctionne toujours, et si nécessaire éteindre et rallumer la machine, il suffit de rajouter cette vérification au script keep-alive.sh:

#!/bin/bash # 1. We are alive, keep the watchdog happy /root/YWatchdog any resetWatchdog # 2. Make sure networking is working SITE=http://www.google.com /usr/bin/wget -q --tries=10 --timeout=5 $SITE -O /tmp/chk &> /dev/null if [ ! -s /tmp/chk ];then shutdown -h fi



Cette version du script va éteindre proprement la machine dès que la connexion Internet tombe durablement. Le watchdog se chargera lui de couper l'alimentation et la rétablir de sorte à rallumer le PC, et ceci autant de fois que nécessaire pour faire marcher le circuit d'alimentation douteux du MK805. Le MK805 devrait maintenant résister à presque tout, pour autant qu'il soit alimenté... mais c'est une autre histoire.

Vous pourrez rendre cela plus efficace et élaborer sur le thème en pilotant le watchdog directement depuis votre programme, à l'aide de la librairie Yoctopuce adéquate. Le principe reste le même: lorsque plus rien ne marche, on éteint tout et on recommence.

Pour finir un dernier conseil: si vous comptez vraiment installer un ordinateur sur une île déserte, en haut d'une montagne ou sur la Lune, faites en sorte que son système d'exploitation démarre depuis un support Read-Only et travaille sur un RAM-disk. Il sera alors insensible aux redémarrages impromptus, qu'ils soient causés par une panne de courant ou par un watchdog.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.