Cómo mantener funcionando el temporizador de vigilancia durante el reinicio / apagado

10

En mi investigación hasta ahora, he notado que hay dos enfoques para activar un temporizador de vigilancia en frambuesa: usar systemd o instalar watchdog. Todo se explica bien aquí: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#

Y he logrado que funcione en ambos sentidos, pero no durante el reinicio / apagado. Utilicé una bifurcación para probarlo y reacciona a eso, sin embargo, cuando intento:

sudo poweroff

Simplemente se queda abajo. Entonces, ¿creo que hay alguna forma de obligar a watchdog a seguir ejecutándose durante el reinicio / apagado para que se restablezca después de unos segundos si no se inicia correctamente?

La mayoría de los enfoques inician watchdog durante el arranque, pero ¿qué pasa si necesita que se ejecute todo el tiempo? Mi frambuesa una vez se detuvo al reiniciar y tuve que desconectarlo / enchufarlo manualmente para que funcione.


ACTUALIZAR:

Algunas cosas me son mucho más claras ahora. Hay 3 cosas a considerar:

  1. temporizador de vigilancia
  2. demonio de vigilancia
  3. servicio de vigilancia demonio

temporizador de vigilancia: un registro que desencadena un reinicio cuando se desborda, cada ciclo de RPI que se incrementa, debe borrarse (patearse) regularmente para evitar el reinicio

Para ejecutarlo en el arranque, agregue lo siguiente a /boot/config.txt :

dtparam=watchdog=on

watchdog daemon: un proceso responsable de limpiar (patear) el temporizador watchdog regularmente

Instalarlo:

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

Configure /etc/watchdog.conf :

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

Configure / etc / default / watchdog :

watchdog_module="bcm2835_wdt"

Para configurarlo, agregue lo siguiente a /etc/modprobe.d/watchdog.conf :

options bcm2835_wdt nowayout=1 heartbeat=10

referencia: http://vk5tu.livejournal.com/35721.html

El parámetro heartbeat para el módulo del kernel es el espacio máximo entre los heartbeats que ve el dispositivo antes de que se reinicie el hardware.

El parámetro nowayout determina qué sucede cuando el dispositivo / dev / watchdog está cerrado: ¿todavía se espera un latido o no? Un valor de 1 dice que la cuenta regresiva para reiniciar sigue ejecutándose y si el dispositivo no se vuelve a abrir y se escribe un latido, la máquina se reiniciará.

Habilítelo (si esto no funciona, primero cuide de watchdog.service e intente nuevamente):

sudo systemctl enable watchdog

Vigilarlo:

sudo systemctl status watchdog

Demonio de servicio de vigilancia: se activa cuando el daemon de vigilancia falla / se detiene, por lo general ejecuta un demonio de keepalive que patea al perro guardián regularmente

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

# OnFailure=wd_keepalive.service- Al comentar esto, se desactiva el demonio keepalive, por lo que una vez que el demonio watchdog falla / se detiene, nada detendrá el reinicio del temporizador watchdog.

[Install] WantedBy=multi-user.target - arreglo del fallo


Finalmente:

Reiniciar RPI. Una vez que se reinicia la frambuesa, todo debería comenzar (temporizador de vigilancia y demonio de vigilancia). Para verificar este uso:

cat /var/log/syslog | grep watchdog

Rendimiento esperado:

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.

Y:

ps aux|grep watchdog

Rendimiento esperado:

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


PRUEBA :

Mata al demonio guardián, ejecuta:

ps aux|grep watchdog

Ver ID de proceso y matarlo:

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

Prueba clásica de forkbomb, ejecute:

: (){ :|:& };:

Para probar, se restablecerá la frambuesa si falla el proceso de reinicio, ejecute:

sudo poweroff - con este he tenido algunos problemas

La frambuesa debería reiniciarse después de cca 15s.

Duje
fuente

Respuestas:

5

sudo poweroffsignifica apagarse y mantenerse alejado. El perro guardián no intercepta, y no debe interceptar esto. El comportamiento que está experimentando es correcto y no debe esperar que el perro guardián reinicie un sistema apagado.

Sin embargo, no creo que esto sea lo que quieras hacer. Si desea reiniciar el pi. deberías usar el comando en su sudo rebootlugar. Y en este caso, si algo se cuelga durante el apagado - secuencia de inicio que se rebootdispara, el perro guardián debería hacerse cargo.

nickcrabtree
fuente
4

No me puse a leer todo el discurso que vinculaste, pero el autor no parece entender al perro guardián.

Hay un perro guardián de hardware BCM; Si desea iniciar el hardware de vigilancia incluye dtparam=watchdog=onen/boot/config.txt

En sí mismo, esto hace poco, aunque debería reiniciar el sistema si no se "patea" regularmente. Puede escribir el código que se abre /dev/watchdogpara iniciarlo.

También hay una watchdog daemonque puede configurar para activar el perro guardián; deberías poder comenzar consudo systemctl enable watchdog

NOTA: el error mencionado a continuación estaba en Jessie y se corrigió en Stretch.
Desafortunadamente, hay un error conocido en el script systemd, que se soluciona fácilmente. Ver http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdog

Milliways
fuente
Gracias por responder, agregué una actualización a mi publicación original para mostrar mi progreso. Sin embargo, todavía tengo problemas para lograr que WDT reinicie RPI cuando ejecuto sudo poweroff. A veces funciona, a veces no: S
Duje
1
Desafortunadamente, parece haber mezclado muchas ideas diferentes. No pretendo ser un experto en vigilancia, sino para ver si se está ejecutando systemctl status watchdog.service. Matar watchdog NO causará un reinicio, ya que watchdog.servicecomienza wd_keepalive.serviceen el cierre, lo que como su nombre implica PREVIENE reiniciar.
Milliways
No, si deshabilita wd_keepalive.service. Así: "Configurar /lib/systemd/system/watchdog.service: # OnFailure=wd_keepalive.service- Al comentar esto, se desactiva el demonio keepalive, por lo que una vez que el demonio watchdog falla / no se detiene, nada detendrá el reinicio del temporizador watchdog"
Duje
2

Power es un servicio de sistema / daemon en pi y es analizado en cadena por un IC directamente pin out / fanouted al Broadcom IC. El flujo de trabajo de la operación puede alterarse al referirse a los archivos del sistema, pero por lo que puedo decirle, está tratando de invocar periperhials en escenarios de regulación de energía personalizados dentro del concepto de interrupciones y temporizadores de vigilancia. Puede alterar una parte de este comportamiento repintando el IC de regulación y realizando una programación básica de prearranque. Echa un vistazo a estos y no dudes en ponerte en contacto conmigo si tienes algo en mente. consulte el conjunto de instrucciones de la línea de referencia de ensamblaje de ARM Corp., así como la documentación de arquitectura. Está en la 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

Por cierto, dile "hola" a tu profesor ...

Yigit Turgut
fuente