Comment garder le chronomètre de surveillance en cours de redémarrage / arrêt

10

Dans mes recherches jusqu'à présent, j'ai remarqué qu'il existe deux approches pour activer une horloge de surveillance sur la framboise: utiliser systemd ou installer watchdog. Tout est bien expliqué ici: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#

Et j'ai réussi à le faire fonctionner dans les deux sens, mais pas pendant le redémarrage / l'arrêt. J'ai utilisé un forkbomb pour le tester et il réagit à cela, cependant quand j'essaye:

sudo poweroff

Il reste juste en bas. Je pense donc qu'il existe un moyen de forcer le chien de garde à continuer de fonctionner pendant le redémarrage / l'arrêt afin qu'il le réinitialise après quelques secondes s'il ne démarre pas correctement?

La plupart des approches démarrent le chien de garde au démarrage, mais que se passe-t-il si vous en avez besoin en permanence? Ma framboise s'est arrêtée au redémarrage et j'ai dû la débrancher / la brancher manuellement pour la faire fonctionner.


MISE À JOUR:

Certaines choses sont beaucoup plus claires pour moi maintenant. Il y a 3 choses à considérer:

  1. minuterie de surveillance
  2. démon de surveillance
  3. démon de service de surveillance

horloge de surveillance: un registre qui déclenche une réinitialisation lorsqu'il déborde, chaque cycle de RPI qu'il incrémente, doit être effacé (kické) régulièrement pour éviter la réinitialisation

Pour l'exécuter au démarrage, ajoutez ce qui suit à /boot/config.txt :

dtparam=watchdog=on

démon de surveillance: un processus responsable de l'effacement (coup de pied) du temporisateur de surveillance régulièrement

Installez-le:

sudo modprobe bcm2835_wdt echo "bcm2835_wdt" | sudo tee -a /etc/modules sudo apt-get install watchdog sudo update-rc.d watchdog defaults

Configurez /etc/watchdog.conf :

watchdog-device = /dev/watchdog watchdog-timeout = 14 realtime = yes priority = 1 max-load-1 = 24

Configurez / etc / default / watchdog :

watchdog_module="bcm2835_wdt"

Pour le configurer, ajoutez ce qui suit à /etc/modprobe.d/watchdog.conf :

options bcm2835_wdt nowayout=1 heartbeat=10

référence: http://vk5tu.livejournal.com/35721.html

Le paramètre de pulsation du module du noyau est l'écart maximal entre les pulsations vues par le périphérique avant le redémarrage du matériel

Le paramètre nowayout détermine ce qui se passe lorsque le périphérique / dev / watchdog est fermé: un battement de cœur est-il toujours attendu ou non? Une valeur de 1 indique que le compte à rebours d'un redémarrage continue de fonctionner et si l'appareil n'est pas rouvert et qu'un battement de cœur est écrit, la machine redémarrera.

Activez-le (si cela ne fonctionne pas, prenez d'abord soin de watchdog.service et réessayez):

sudo systemctl enable watchdog

Surveillez-le:

sudo systemctl status watchdog

démon de service de surveillance: s'active lorsque le démon de surveillance échoue / s'arrête, exécute généralement un démon keepalive qui démarre régulièrement le chien de garde

Configurez /lib/systemd/system/watchdog.service :

# OnFailure=wd_keepalive.service- Commenter cela désactive le démon keepalive donc une fois que le démon de surveillance échoue / s'arrête, rien n'empêchera le chronomètre de surveillance de redémarrer RPI

[Install] WantedBy=multi-user.target - correction d'un bug


Finalement:

Redémarrez RPI. Une fois la framboise redémarrée, tout devrait démarrer (horloge de surveillance et démon de surveillance). Pour vérifier cette utilisation:

cat /var/log/syslog | grep watchdog

Production attendue:

Jun 14 12:09:08 raspberrypi systemd[1]: Starting watchdog daemon... Jun 14 12:09:08 raspberrypi watchdog[813]: starting daemon (5.14): Jun 14 12:09:08 raspberrypi watchdog[813]: int=1s realtime=yes sync=no soft=no mla=24 mem=0 Jun 14 12:09:08 raspberrypi watchdog[813]: ping: no machine to check Jun 14 12:09:08 raspberrypi watchdog[813]: file: no file to check Jun 14 12:09:08 raspberrypi watchdog[813]: pidfile: no server process to check Jun 14 12:09:08 raspberrypi watchdog[813]: interface: no interface to check Jun 14 12:09:08 raspberrypi watchdog[813]: temperature: no sensors to check Jun 14 12:09:08 raspberrypi watchdog[813]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no Jun 14 12:09:08 raspberrypi watchdog[813]: watchdog now set to 14 seconds Jun 14 12:09:08 raspberrypi watchdog[813]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer Jun 14 12:09:08 raspberrypi systemd[1]: Started watchdog daemon.

Et:

ps aux|grep watchdog

Production attendue:

root 813 0.0 0.2 1888 1760 ? SLs 12:09 0:00 /usr/sbin/watchdog pi 900 0.0 0.2 4752 1992 pts/0 S+ 12:10 0:00 grep --color=auto watchdog


TEST:

Tuez le démon de surveillance, exécutez:

ps aux|grep watchdog

Voir l'ID de processus et le tuer:

root 812 0.0 0.2 1888 1760 ? SLs 12:16 0:00 /usr/sbin/watchdog pi 898 0.0 0.2 4752 1992 pts/0 S+ 12:16 0:00 grep --color=auto watchdog

sudo kill -9 812

Test de fourche classique, exécutez:

: (){ :|:& };:

Pour tester la réinitialisation de la framboise si le processus de redémarrage échoue, exécutez:

sudo poweroff - avec celui-ci, j'ai eu quelques problèmes

La framboise devrait redémarrer après 15 ans environ.

Duje
la source

Réponses:

5

sudo poweroffsignifie arrêter et rester éteint. Le chien de garde n'intercepte pas et ne devrait pas intercepter cela. Le comportement que vous rencontrez est correct et vous ne devez pas vous attendre à ce que le chien de garde redémarre un système hors tension.

Je ne pense pas que ce soit ce que vous voulez faire cependant. Si vous souhaitez redémarrer le pi. vous devez utiliser la commande à la sudo rebootplace. Et dans ce cas, si quelque chose se bloque pendant la séquence d'arrêt - démarrage qui se rebootdéclenche, le chien de garde devrait alors prendre le relais.

nickcrabtree
la source
4

Je n'ai pas parcouru toutes les diatribes que vous avez liées, mais l'auteur ne semble pas comprendre le chien de garde.

Il existe un chien de garde matériel BCM; Si vous voulez commencer le chien de garde du matériel inclut dtparam=watchdog=ondans/boot/config.txt

En soi, cela ne fait pas grand-chose, bien qu'il doive redémarrer le système s'il n'est pas "lancé" régulièrement. Vous pouvez écrire du code qui s'ouvre /dev/watchdogpour le lancer.

Il y a aussi un watchdog daemonque vous pouvez configurer pour activer le chien de garde; vous devriez pouvoir commencersudo systemctl enable watchdog

REMARQUE le bogue mentionné ci-dessous était dans Jessie et est corrigé dans Stretch.
Malheureusement, il existe un bogue connu dans le script systemd, qui est facilement corrigé. Voir http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdog

Milliways
la source
Merci d'avoir répondu, j'ai ajouté une mise à jour à mon message d'origine pour montrer mes progrès. Cependant, j'ai toujours du mal à obtenir le WDT pour redémarrer RPI lorsque je cours sudo poweroff. Parfois ça marche, parfois ça ne marche pas: S
Duje
1
Malheureusement, vous semblez avoir mélangé beaucoup d'idées différentes. Je ne prétends pas être un expert du chien de garde, mais voir s'il fonctionne systemctl status watchdog.service. Tuer watchdog NE causera PAS de redémarrage, car le watchdog.servicedémarrage wd_keepalive.serviceà la fermeture, ce qui, comme son nom l'indique, PRÉVENIT le redémarrage.
Milliways
Pas si vous désactivez wd_keepalive.service. Comme ceci: "Configurer /lib/systemd/system/watchdog.service: # OnFailure=wd_keepalive.service- Commenter cela désactive le démon keepalive donc une fois que le démon watchdog échoue / s'arrête, rien n'arrêtera le temporisateur du chien de garde de redémarrer RPI"
Duje
2

Power est un service système / démon dans pi et est une chaîne analysée par un circuit intégré directement branché / déployé sur le circuit intégré Broadcom. Le flux de travail des opérations peut être modifié en se référant aux fichiers système, mais d'après ce que je peux vous dire, vous essayez d'invoquer des périphériaux dans des scénarios de régulation de puissance personnalisés dans le cadre du concept des interruptions et des horloges de surveillance. Vous pouvez modifier une partie de ce comportement en ré-épinglant le CI de régulation et en effectuant une programmation bare metal de pré-démarrage. Consultez-les et n'hésitez pas à me contacter si vous avez quelque chose en tête. consultez le jeu d'instructions de la ligne de référence d'assemblage ARM Corp. ainsi que la documentation sur l'architecture. C'est sur le web.

http://infocenter.arm.com/help/topic/com.arm.doc.dui0489f/DUI0489F_arm_assembler_reference.pdf

https://www.arm.com/files/pdf/CortexM3_programming_for_ARM7_developers.pdf

Btw, dites «salut» à votre professeur ...

Yigit Turgut
la source