2012-01-31 10 views
15

Hola, ¿alguien puede decirme cómo manejar el software watchdog en Linux? Tengo un programa "SampleApplication" que se ejecuta continuamente y necesito reiniciarlo si se cuelga o se cierra inesperadamente.cómo usar el software de vigilancia de Linux

Estaba buscando en Google sobre esto y encontré que linux tiene un perro guardián en/dev/watchdog pero no sé cómo usarlo. Podría ayudarme alguien con el ejemplo.

Mi pregunta es dónde debo especificar el nombre de mi aplicación y el intervalo de demora para reiniciar. Como soy nuevo en Linux, por favor infórmenme si es posible. Gracias

+1

Hasta donde yo sé, eso solo asegura que el sistema no se cuelga y se restablece si es así.No creo que puedas usarlo solo para mantener activa una aplicación de usuario. – Janne

+0

Tengo experiencia con una herramienta en una aplicación Linux embebida que hace justo lo que me pide, desafortunadamente no recuerdo su nombre, de lo contrario, publicaría una respuesta, pero sí sé que funciona más o menos como ha sugerido en cualquier caso, por lo que no es en absoluto una mala idea. Otra opción es usar un puerto específico en la dirección del localhost 27.0.0.1, y enviar procesos a él y a su supervisor de daemon del software./dev/watchdog es para el perro guardián de hardware, tu daemon puede mantener eso, de modo que, en última instancia, si el daemon se detiene, el sistema se reinicia (como último recurso). – Clifford

Respuesta

12

La mayoría de los programas de Unix/Linux init administrarán los daemons por usted y los reiniciarán. Busque ubicar su servicio en /etc/inittab. O puede estar usando Upstart o systemd.

Todos estos programas se ejecutan como PID 1 y su trabajo es supervisar y reiniciar los procesos del sistema.

De su etiqueta de Busybox supongo que está ejecutando un sistema integrado. En ellos, los scripts de inicio del estilo System V con todos sus scripts de shell son realmente exagerados. Probablemente deba extraer todo eso y reemplazarlo con entradas en /etc/inittab o trabajos upstart o systemd.

+0

Hola @Zan gracias por sus entradas, agregué ":: respawn:/ruta/aplicación" a la /etc/inittab y la aplicación ejecutó bien después de reiniciar el dispositivo, el único problema es que esta entrada es temporal y se elimina automáticamente al reiniciar el dispositivo. ¿Hay alguna forma de para que el procedimiento de inicialización sea permanente? –

+1

@ITion: no se supone que sea temporal. Debe usar un 'initrd' para su directorio'/'. O posiblemente tenga un '' 'de solo lectura y una capa de lectura-escritura en la parte superior. –

7

¿Qué le parece usar cron? Configure un pequeño trabajo cron que se ejecute cada minuto. Verifica si tu aplicación está activa (usando ps) y si no, reiníciala.

Hacer un pequeño script como el siguiente:

#!/bin/bash 
if [ ! "$(pidof myapp)" ] 
then 
    /path/to/myapp & 
fi 

prueba Usted si "miaplicacion" está en la lista de procesos. "!" revierte la prueba. Si no está allí, ejecuta "myapp". "&" es solo para que comience en segundo plano.

Agregue esto a cron. Dependiendo de su sistema y preferencias, hay varias formas de hacerlo. El clásico es usar crontab. Hay una gran cantidad de documentación sobre cómo especificar la línea de crontab, pero es probable que quieren algo como esto:

* * * * * /path/to/the/script.sh > /dev/null 

Esto ejecutará la prueba cada minuto de cada hora de cada ... Usted consigue la idea.

+0

Hola @Janne gracias por tu respuesta. Pero el linux que estoy usando es Busybox y doenst tiene Cron. Hay alguna otra manera. –

+0

Entonces, un sistema integrado entonces. Exactamente lo que está disponible depende del Linux particular instalado en él (busybox es simplemente una aplicación comúnmente utilizada en muchos sistemas pequeños). Si todo lo demás falla, siempre puede escribir una pequeña aplicación c que se encuentre en un ciclo cronometrado y monitorea la lista de procesos o algún archivo de estado que su aplicación escriba, luego reinicia su proceso si es necesario. – Janne

+0

@Janne ¿es posible crear un pequeño script que busque el nombre del proceso ya que el pid siempre cambia? Saludos cordiales, robert –

2

Documentación para el organismo de control está aquí: http://linux.die.net/man/8/watchdog

Pero parece que esto no es lo que desea. El software de vigilancia de Linux reiniciará la máquina, no solo reiniciará su proceso.

Puede hacer fácilmente su propio perro guardián. Por ejemplo, podría hacer que su programa escriba periódicamente algún archivo temporal e inicie un script que verifique el archivo de vez en cuando y reinicie su proceso si no se ha actualizado durante un tiempo.

4

Uso /etc/inittab puede utilizarlo para empezar en los niveles de ejecución específicos y si se mata lo reanudará automáticamente

n:2345:respawn:/path/to/app 

Esto hará reaparecer en los niveles de ejecución 2345 es probable que sólo necesitan 3 y 5 pero esto funcionará bien y está integrado en Linux.

12

Desde los moderadores ignoran post-mejoras Ahora voy a tener que ponerlo por separado

El control del software Linux se reinicie la máquina, no sólo reiniciar el proceso.

Bueno, esto simplemente no es cierto, es muy posible reiniciar los procesos individuales o múltiples después de las señales de vigilancia que los sistemas pende - incluso se puede anular el reinicio o hacer un soft-reinicio, uno es capaz de configure "test" y "repair" -scripts/binarios que hagan lo que usted quiera que hagan. La versión busybox de watchdog se reduce a un nivel casi inservible ... supongo que el mundo nunca sabrá por qué los busybox-devs decidieron abandonar las funcionalidades principales, por ahora, sería mejor evitar busybox en absoluto, > las mejoras de velocidad son casi inexistentes, la disminución de tamaño no compensa la gran pérdida de funcionalidad./bin/bash es bastante pequeño: recompila todo con la bandera "-Os" si el tamaño importa y eres bueno para llevar: un perro guardián listo para usar que permite casi todo lo que uno pueda desear.

Ah, y POR FAVOR, NO cree su propio perro guardián: lo más probable es que le deje con errores no controlados y le haga la vida imposible algún día.

+3

Bienvenido en SO. Sus ediciones no fueron ignoradas, pero se consideraron inválidas porque cambian lo que decía el cartel original. Un comentario sería la forma adecuada de informarlo. Pero primero tendrías que obtener cierta reputación, perdón por eso. – pmr

+0

Pero si el watchdog señala un * system * hang, eso no identifica un proceso individual para reiniciar. Esta no es una respuesta a la pregunta: el monitoreo de uno o más procesos de otro es un objetivo legítimo, y no uno logrado a través de/dev/watchdog. La pregunta ni siquiera sugiere crear su propio perro guardián; simplemente demuestra un malentendido de la diferencia entre el dispositivo/dev/watchdog y un proceso de supervisión de software (o software watchdog). – Clifford

1

Si está utilizando systemd hay 2 watchdogs: uno para hardware (usando systemd.conf o usando un demonio watchdog) y uno para daemons inicializados como servicios. Si systemd es su opción echar un vistazo a los siguientes: http://0pointer.de/blog/projects/watchdog.html

0

Si alguien ha llegado a esta página buscando una vigilancia del sistema operativo (que no es directamente lo que el PO quería), esto es lo que necesita:

sudo apt-get install watchdog 
service watchdog status 
service watchdog start 

Para comprobar que está funcionando ejecutar:

tail -f /var/log/syslog | grep watchdog 

debería ver algo como:

Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s) 

Espero estar respondiendo la pregunta correctamente. Todas las demás respuestas parecen ser muy diferentes.

0

Puede probar wdog, que es una utilidad escrita en C++ y vinculada con el marco Kahless_9. El código fuente para esto se puede descargar desde: https://github.com/zepher999/wdog y, en consecuencia, se actualiza para adecuarse a sus necesidades. Todavía hay algunos cambios en la lista TODO requeridos para el futuro, pero como esto debe cumplir con sus requisitos actuales.

La utilidad requiere un archivo csv como entrada en el que se incluyen todos los procesos a ser observados con sus argumentos. Al iniciarse, la utilidad inicia todos estos procesos designados en el archivo csv y los supervisa para la salida/finalización, luego de lo cual reinicia el proceso.

Actualmente, wdog permite la detención/eliminación de procesos supervisados, así como la capacidad de iniciar la utilidad en modo frío o caliente. El modo caliente permite que la utilidad use registros almacenados en caché para monitorear procesos ya iniciados mientras que el modo en frío inicia el descarte de dichos valores almacenados en caché, intentando así iniciar todos los procesos.

La utilidad también tiene la capacidad de iniciar una instancia de sí mismo para monitorearse a sí misma, teniendo así un perro guardián para el perro guardián.

Cuestiones relacionadas