On peut dire que je suis quelque peu obsédé par les chiens de garde. Il y a environ six articles sur le sujet sur ce site et je travaille sur quelques projets de chiens de garde matériels. J'aurais dû installer un chien de garde sur le Raspberry Pi qui héberge mon système raspberrypitique auparavant, mais mieux vaut tard que jamais.
Il existe un minuteur de surveillance matériel intégré au SOC (système sur puce) du Raspberry Pi. Donc, il devrait être activé pour redémarrer le Raspberry Pi si le système d'exploitation se bloque. De plus, je souhaite surveiller Domoticz pour redémarrer le système si le service devait cesser de fonctionner pendant que le système d’exploitation reste intact. Le site de Domoticz contient deux pages sur le sujet.
Ce dernier prône l'utilisation de Monit pour surveiller Domoticz. C'est une solution générale qui pourrait surveiller de nombreux services supplémentaires. Éventuellement, j'examinerai ce système, mais actuellement, je quelque chose de plus simple capable de
- redémarrer si le chien de garde matériel arrive à expiration,
- redémarrer si Domoticz se bloque, et
- envoyer un avis par courriel lorsque le système redémarre.
Il y a beaucoup d'informations sur le Web, mais certaines sont obsolètes (comme le sera sans doute ce billet dans un avenir plus ou moins proche). La leçon est d'essayer de vérifier les choses avant d'installer quoi que ce soit. À titre d'exemple, le module de noyau du chien de garde est déjà installé dans la dernière image Raspbian (Stretch nov. 2018) et rien ne doit être fait à cet effet.
Cependant, il n'est pas opérationnel. Pour vérifier cela, j'ai exécuté le script "forkbomb".
Après un moment, le Raspberry Pi se figea, Domoticz cessa de fonctionner et je ne pouvais plus ouvrir de
sessions SSH. La seule option était de couper le courant, puis de rallumer le
Raspberry Pi. Pour remédier à cette situation, il faut installer le service
watchdog
et modifier son fichier de configuration.
Les deux premières lignes se trouvaient déjà dans le fichier, mais il
s’agissait de commentaires. Cela signifie que le "#" figurant au début de ces
deux lignes doit être effacé. La troisième ligne, relative au délai
d'attente, est nécessaire, car sans elle watchdog
définit un
délai d'attente de 60 secondes alors que le temporisateur de surveillance
Raspberry Pi ne prend en charge qu'un délai d'attente de 15 secondes. Si la
ligne n'est pas insérée, l'erreur suivante sera rencontrée.
Merci beaucoup à Florian Harr pour cette correction. Ensuite, démarrez le service surveillance et vérifiez que tout fonctionne correctement.
Un nouveau lancement du script "forkbomb" a montré que le chien de garde est efficace. Après un certain temps, la session ouverte a gelé, mais le Raspberry Pi a redémarré et une nouvelle session SSH pourrait être ouverte. En regardant le journal, il était possible de voir la "morsure" du chien de garde.
Fait intéressant, il semble que watchdog
pourrait envoyer un
message à l'aide sendmail
lors qu'il arrête le système ce qui
pourrait être la réponse à mon troisième désir. J'ai utilisé une approche
différente, comme on le verra plus tard. Pour l'instant, voyons comment
surveiller Domoticz J'ai suivi l'exemple dans Setting up the raspberry pi watchdog, mais sans activer
le journal de Domoticz. Au lieu de cela, le truc
Linux de "toucher" un fichier vide pour mettre à jour régulièrement sa
dernière date de modification sera le moyen de "nourrir" le chien de garde.
Tout ce qu'il faut, c'est un simple script Lua qui sera exécuté à chaque
minute Domoticz.
Vérifiez régulièrement l'heure de la dernière modification du fichier pour constater qu'elle est mise à jour toutes les minutes.
Le fichier de configuration du chien de garde doit être mis à jour. Deux lignes en début de celui-ci doivent être changées.
Arrêtez et redémarrez le service de surveillance, puis attendez plus de cinq minutes (300 secondes) pour vous assurer que le système ne redémarre pas. Arrêtez ensuite le service Domoticz et le Raspberry Pi devrait être redémarré dans cinq minutes environ.
Tenez compte de l'avertissement concernant les redémarrages: n'oubliez pas [que le système redémarrera] lorsque vous arrêtez le service Domoticz.
Alors qu'en est-il de la notification par courrier électronique? Encore
une fois, j'utiliserai l'approche proposée dans la première référence. Elle
consiste à envoyer un courrier électronique chaque fois que le Raspberry Pi
est redémarré. C'est plus simple que d'essayer de faire envoyer le message par
le service watchdog
. Je suis sûr que cela est possible et qu’il
serait alors aussi possible d’envoyer un courrier électronique différent
indiquant la raison du redémarrage. Cela reste quelque chose à faire plus
tard.
Dans la section 3. Mail Alert Using syslog
d'un billet récent, j'ai
modifié un court script Python pour envoyer un courriel. J'ai décidé de
réutiliser ce script pour le rendre un peu plus polyvalent. Cela évite
l'installation sendmail
qui semble être une tâche plutôt
redoutable. Voici le script Python 3.
Version téléchargeable : pymail.
Le script est enregistré en tant que fichier pymail
dans le
sous-répertoire pythons
du répertoire personnel de
pi
. La dernière étape consiste à ajouter une tâche
cron
pour envoyer le courrier électronique au moment du
redémarrage.
Comme on peut le constater, une tâche était déjà effectuée au redémarrage, mais peu importe si une autre est ajoutée. J'ai imposé une minute d'attente avant d'envoyer le message. Cela peut être excessif, mais au début, l'envoi immédiat du courrier électronique posait des problèmes.