Watchdog en Odroid C1

¿Cuantas veces os ha pasado que se os queda colgado el sistema, y os dais cuenta varias horas o días después? o vais a ver una película de vuestro servidor de archivos y no tenéis acceso porque se ha quedado frito… Aun es peor si tenéis montado un sistema domótico y se os queda frito cuando estáis fuera de casa, o si tenéis un sistema de riego y deja de regar una temporada… Todo esto se podría solucionar auto-reiniciando el sistema cuando falle… ¡Hay solución!

Vamos a configurar el watchdog del sistema para que cuando ocurra algún desastre, el sistema se reinicie y siga funcionando como si nada hubiese pasado. Un watchdog es un sistema hardware o software, que nos permite reiniciar el sistema cuando se cumplen ciertas condiciones. Por supuesto un sistema con soporte por hardware tiene más posibilidades, ya que si tenemos un kernel-panic o similar nos aseguramos de que el sistema, al menos, se reiniciará.

 

Instalación y configuración

Lo primero que haremos es comprobar que nuestro sistema tiene cargado el módulo del watchdog, y que tiene el soporte compilado y activado en el kernel. Para ello nos vale con comprobar que existen los archivos /dev/watchdog* y que en la salida del comando dmesg tenemos las lineas correspondientes al módulo aml_wdt (en la Raspberry Pi el módulo es bcm2708_wdog):

Por defecto, en la versión 3.10.96-154 del kernel para la Odroid C1 viene activado el watchdog (no viene como módulo externo, esta compilado dentro del kernel), asique este punto lo tenemos solucionado (no pasa lo mismo en versiones anteriores, y hay que recompilarlo, activando unos parámetros especiales en el archivo dts correspondiente a la Odroid C1 (hay mas información en el foro de Hardkernel)).

Lo siguiente que haremos el bajarnos el paquete watchdog, que es el daemon que estará continuamente comprobando las condiciones que le indiquemos e informando al driver aml_wdt de que todo va bien, y no debe reiniciar el sistema:

En las pruebas que he tenido que hacer hasta que ha funcionado todo bien, me he dado cuenta, de que el archivo watchdog.service que instala el paquete watchdog tiene un pequeño fallo, y no me arrancaba al iniciar la Odroid, pero se puede arreglar. Para ello, editamos el archivo /lib/systemd/system/watchdog.service y en la sección [Install], que aparecerá vacía, añadimos el siguiente código para que quede como os muestro a continuación:

Nos queda indicarle el dispositivo watchdog que se debe usar, en el fichero de configuración /etc/watchdog.conf. Por defecto la linea está comentada, tenemos que activarla:

Una vez hecho el cambio habilitamos el servicio y reiniciamos el sistema para comprobar que arranca correctamente con el equipo.

 Al arrancar comprobamos que el servicio funciona correctamente:

Las lineas importantes son la que indica que el servicio esta activo: Active: active (running) since mar 2016-12-06 12:36:20 CET; 31s ago, y después que en el log no aparezcan errores fatales.

¿Y ahora qué? El watchdog funciona de la siguiente manera: el demonio que comprueba el sistema, cuando detecta que todo esta bien envía cierta información al dispositivo /dev/watchdog, y cuando no, deja de hacerlo y el watchdog reinicia el sistema. O más fácil: mientras se le da de comer al perro guardián, todo va bien, pero cuando se le deja de alimentar, se enfada y reinicia el sistema.

 

¿Que condiciones puede controlar el watchdog?

Por ejemplo, si nos quedamos sin conectividad de red. Para activar esta característica configuramos en el archivo /etc/watchdog la lineas ping e interface con la interfaz de red que queremos controlar, y una IP a la que se le hará ping continuamente para detectar la caída de la red. Quedaría mas o menos así:

Al reiniciar el servicio, o el sistema, el demonio watchdog se encargará de comprobar que podemos hacer ping a la dirección indicada, y cuando no sea posible, se reiniciará el equipo.

De forma similar tenemos opciones para supervisar la carga del sistema, con las opciones max-load-*, la temperatura máxima, con max-temperature/temperature-* (es posible que se necesite instalar el paquete lm-sensors), existencia de ficheros o cambios en los mismos con file/change, existencia de procesos a través de su PID con pidfile, estado de la memoria con min-memory, o cualquier otra cosa mediante un script que devuelva 0 cuando todo este correcto con test-binary/test-*. Como veis hay muchas posibilidades, tenéis mas información aquí.

Con esta serie de entradas poco a poco vamos consiguiendo un sistema más robusto, con el sistema de archivos de solo lectura, backups remotos automatizados, reinicios automágicos, …

Espero que os haya gustado y os animéis a probarlo en vuestros servidores, y como siempre, si tenéis alguna duda o algún comentario, siempre son bienvenidos 🙂

 

Actualización 08/12/2016:

Ya me ha pasado 🙁

Trasteando con un equipo remoto, se me había olvidado configurar una cosa y ha fallado el watchdog. Hay que activar el watchdog al arrancar el sistema, en el script /etc/rc.local con el siguiente comando:

Lo tenéis documentado en esta entrada del foro de Hardkernel, y podéis comprobar que efectivamente está funcionando si ejecutáis el comando top y veis varios procesos watchdog, con estado R (Running) en lugar de S (Stopped).

Comentarios

  1. Por Miguel

    Responder

    • Por José María

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *