Otro “watchdog” para máquinas 😉


XeNIX me ha dado una idea… aquí teneis otro script parecido pero en Perl, lo uso yo hace tiempo y aunque sólo vigila una máquina no debe ser muy dificil modificarlo para que vigile varias añadiendo un array de máquinas por aquí, un bucle que lo recorra por allá…

Básicamente lo que hago es mandar un ping a la máquina cada X segundos. Si contesta no pasa nada, todo sigue igual. Pero si no contesta, le mando un e-mail a root avisando de la situación y duplico el tiempo de espera entre pings. Esto se repite indefinidamente, con lo que la atención del administrador se capta al principio con varios mensajes bastante próximos en el tiempo, y luego simplemente se le va recordando el problema cada vez a intérvalos más grandes. De esta manera el fallo de una máquina no se convierte en un mail bombing 😉 y no se pierde tiempo insistiendo continuamente en algo que de momento no funciona, pero el problema nunca queda totalmente olvidado.
Cuando la máquina finalmente contesta a un ping, mando otro mensaje al administrador avisando de la situación y vuelvo a hacer los pings a intérvalos regulares como si no hubiera pasado nada.
Supongo que es cuestión de gustos, pero a mi me parece útil O:-). Con muchas máquinas supongo que estaria bién modificar algunas cosas para conseguir que no se mandaran todos los pings al mismo tiempo, evitar mandar demasiados mensajes al administrador, etc. Además supongo que habría que cambiar la estructura del programa porque el bucle este para un montón de máquinas no sirve, hacerlo secuencialmente para cada una es una tonteria (¿y si usara una alarma para cada máquina en lugar de un bucle con sleeps?)… Bueno, ahí va el código básico por si a alguien le apetece jugar:

#!/usr/bin/perl -w
use strict;

my $base_sleep = 60;
my $sleep_time = $base_sleep;

die “No target!” unless
my $host = $ARGV[0];

while (1) {
system “ping -c1 $host &> /dev/null”;
my $exit_value = $? >> 8;
if ($exit_value == 0) {
print “$host is ALIVE\n”;
if ($sleep_time > $base_sleep) {
$sleep_time = $base_sleep;
system “echo ‘$host is ALIVE, back to standard sleep time \
Next ping in $sleep_time seconds’ | mail root”;
}
}
elsif ($exit_value == 1) {
print “$host is DEAD\n”;
$sleep_time *= 2;
system “echo ‘$host is DEAD, doubling sleep time \
Next ping in $sleep_time seconds’ | mail root”;
}
elsif ($exit_value == 2) {
die “ping error!?”;
}
print “Waiting $sleep_time seconds…\n”;
sleep $sleep_time;
}

exit 0;

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=653 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.