2009-02-18 12 views
14

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.Software de vigilancia de Linux

Necesito hacer que mi daemon tenga en cuenta esta configuración porque influirá en cómo 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 muy simple de vigilancia. 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. A partir de la documentación:

El organismo de control puede ser detenido sin provocando un reinicio si el dispositivo /dev/organismo de control se cierra correctamente, a menos que su núcleo está compilado con la opción CONFIG_WATCHDOG_NOWAYOUT habilitado.

tengo que ser capaz de decir si CONFIG_WATCHDOG_NOWAYOUT se estableció desde el interior de un espacio demonio de usuario, por lo que puedo manejar el cierre de dicho demonio de manera diferente. En otras palabras, si ese valor es alto, un simple:

# /etc/init.d/mydaemon stop 

... sería reiniciar el sistema en 59 segundos, porque nada está escribiendo en/dev/guardián por más tiempo. Entonces, si está configurado como alto, mi controlador para SIGINT necesita hacer cosas adicionales (es decir, advertir al usuario como mínimo).

No puedo encontrar una manera de obtener esta configuración desde el espacio de usuario :(Cualquier ayuda se agradece.

Respuesta

17

AHA! Después de cavar a través del núcleo de linux/watchdog.h y drivers/watchdog/softdog.c, yo era capaz de determinar las capacidades de la interfaz softdog ioctl(). en cuanto a la 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", 
     }; 

Se no el apoyo de una magia de cerca que (parece) anular CONFIG_WATCHDOG_NOWAYOUT. Entonces, cuando termine normalmente, tengo que escribir un solo carácter "V" en /dev/watchdogy luego cerrarlo, y el temporizador dejará de contar.

Un simple ioctl() en un descriptor de archivo a /dev/watchdog preguntando 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. 
} 

Cuando se trabaja con organismos de control de hardware, es posible que desee abrir con O_NONBLOCK así ioctl() no open() bloques (por lo tanto, la detección de una tarjeta de ocupados).

Si WDIOF_MAGICCLOSE no es compatible, se debe asumir que el soft watchdog está configurado con NOWAYOUT. Recuerde, solo abriendo el dispositivo inicia con éxito la cuenta regresiva. Si todo lo que estás haciendo es sondear para ver si admite la magia cercana y lo hace, entonces mágico ciérralo. 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.

+2

Los detalles de Magic Close y IOCTL en la especificación API confirman los comentarios anteriores, pero brindan más detalles sobre el fondo. Ver [esto] (http://www.mjmwired.net/kernel/Documentation/watchdog/watchdog-api.txt) por ejemplo. Primero encontrado [aquí] (http://stackoverflow.com/a/2020516/939250). –

3

guardias vigilante de un duro bloqueo del sistema, ya sea a causa de un accidente de software, o de hardware.

lo que necesita es un demonio de sondeo daemon (DMD). compruebe 'monit'

+1

Estoy escribiendo un DMD, específicamente para uso en invitados xen paravirtualizados que también tiene alguna funcionalidad de estilo nagios (los datos de sysinfo se escriben en xenbus donde pueden ser vistos por el dominio con privilegios). Por favor, ver ediciones adicionales a la pregunta, no estaba lo suficientemente claro. –

-2

Creo que los controladores del dispositivo watchdog están realmente destinados a ser utilizados 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 lo es.

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

+1

Si el softdog es un módulo cargable, la vida se vuelve muy fácil ya que también acepta argumentos al cargar (y sí, la descarga lo detiene). El problema es que, en los sistemas integrados (en los que estoy trabajando, como dijiste), con frecuencia se ven kernels monolíticos con todo como objetos estáticos. –

+1

Creo que fue, de hecho, un poco un descuido, por lo que más tarde cambiaron el perro guardián suave para obedecer al personaje mágico cercano ... es decir, escribir una sola 'V' en el dispositivo, luego cerrarlo, siempre detiene la cuenta atrás. –

Cuestiones relacionadas