tag editar easytag c linux watchdog

c - editar - linux easytag



Vigilante del software Linux (3)

Estoy escribiendo un monitor de sistema para Linux y quiero incluir algunas funciones de vigilancia. En el kernel, puede configurar el watchdog para continuar incluso si / dev / watchdog está cerrado. En otras palabras, si mi daemon sale normalmente y cierra / dev / watchdog, el sistema seguirá reiniciando 59 segundos más tarde. Ese puede o no ser un comportamiento deseable para el usuario.

Necesito que mi daemon esté al tanto de esta configuración porque influirá en la forma en que manejo SIGINT. Si la configuración está activada, mi daemon debería (preferiblemente) iniciar un apagado ordenado al salir o (al menos) advertir al usuario que el sistema se reiniciará en breve.

¿Alguien sabe de un método para obtener esta configuración del espacio de usuario? No veo nada en sysconf () para obtener el valor. Del mismo modo, necesito poder decir si el software watchdog está habilitado para comenzar.

Editar:

Linux proporciona una interfaz de watchdog muy simple. Un proceso puede abrir / dev / watchdog, una vez que se abre el dispositivo, el núcleo comenzará una cuenta regresiva de 60 segundos para reiniciar a menos que se escriban algunos datos en ese archivo, en cuyo caso el reloj se restablece.

Dependiendo de cómo esté configurado el kernel, cerrar ese archivo puede o no detener la cuenta regresiva. De la documentación:

El perro guardián se puede detener sin provocar un reinicio si el dispositivo / dev / watchdog se cierra correctamente, a menos que su kernel esté compilado con la opción CONFIG_WATCHDOG_NOWAYOUT habilitada.

Necesito poder decir si CONFIG_WATCHDOG_NOWAYOUT se configuró desde un daemon de espacio de usuario, para que pueda manejar el cierre de dicho daemon de forma diferente. En otras palabras, si esa configuración es alta, un simple:

# /etc/init.d/mydaemon stop

... reiniciaría el sistema en 59 segundos, porque ya no está escribiendo en / dev / watchdog. Entonces, si se configura alto, mi controlador para SIGINT necesita hacer cosas adicionales (es decir, advertir al usuario como mínimo).

No puedo encontrar una forma de obtener esta configuración del espacio de usuario :( Cualquier ayuda es apreciada.


un perro guardián protege contra el bloqueo forzoso del sistema, ya sea por una falla del software o por falla del hardware.

lo que necesita es un daemon de monitoreo daemon (dmd). verificar ''monit''


Creo que los controladores de dispositivo watchdog están realmente destinados para su uso en plataformas integradas (o al menos bien controladas) donde los desarrolladores tendrán el control de qué núcleo está en uso.

Esto podría considerarse un descuido, pero creo que no.

Otra cosa que podría intentar, si el perro guardián se construyó como un módulo cargable, la descarga presumiblemente abortará el apagado.


AHA! Después de drivers/watchdog/softdog.c linux/watchdog.h y drivers/watchdog/softdog.c , pude determinar las capacidades de la interfaz softdog ioctl() . Mirando las capacidades que anuncia en struct watchdog_info :

static struct watchdog_info ident = { .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE, .firmware_version = 0, .identity = "Software Watchdog", };

CONFIG_WATCHDOG_NOWAYOUT un cierre mágico que (parece) anular CONFIG_WATCHDOG_NOWAYOUT . Entonces, cuando termino normalmente, tengo que escribir un solo carácter "V" en /dev/watchdog luego lo cierro, y el cronómetro dejará de contar.

Un simple ioctl() en un descriptor de archivo para /dev/watchdog pregunta WDIOC_GETSUPPORT permite determinar si este indicador está configurado. Pseudo código:

int fd; struct watchdog_info info; fd = open("/dev/watchdog", O_WRONLY); if (fd == -1) { perror("open"); // abort, timer did not start - no additional concerns } if (ioctl(fd, WDIOC_GETSUPPORT, &info)) { perror("ioctl"); // abort, but you probably started the timer! See below. } if (WDIOF_MAGICCLOSE & info.options) { printf("Watchdog supports magic close char/n"); // You have started the timer here! Handle that appropriately. }

Al trabajar con watchdogs de hardware, es posible que desee abrir con O_NONBLOCK para que los O_NONBLOCK ioctl() no sean open() (por lo tanto, detectar una tarjeta ocupada).

Si WDIOF_MAGICCLOSE no es compatible, se debe asumir que el soft watchdog está configurado con NOWAYOUT. Recuerde, solo al abrir el dispositivo con éxito se inicia la cuenta regresiva. Si todo lo que estás haciendo es sondear para ver si admite magia cerca y lo hace, entonces la magia lo cierra . De lo contrario, asegúrese de lidiar con el hecho de que ahora tiene un perro guardián en ejecución.

Desafortunadamente, no hay una manera real de saberlo con seguridad sin realmente iniciarlo, al menos no que yo pueda encontrar.