Estábamos sufriendo pequeños cortes de red muy esporádicos (digamos que 3 ó 4 al día).
Necesitaba registrar la fecha y hora para que los técnicos de comunicaciones supieran dónde buscar...
Podría haber utilizado cualquier software comercial pero preferí hacer el siguiente script PERL:
Funciona perfectamente con la instalación por defecto de ActivePerl para Windows:
El funcionamiento es muy sencillo:
#!/usr/bin/perl -w
use Net::Ping;
my $p = Net::Ping->new("icmp");
my @servidores=('servidor1','servidor2','servidor3','servidor4');
open(FICHERO, ">>errores.txt")||die "error!!!";
print FICHERO "EMPEZAMOS ANALISIS\n";
fechaHora();
print FICHERO "----------------------------------\n";
close(FICHERO);
for(;;) {
foreach my $host (@servidores)
{
if ($p->ping($host, 2)) {
print "$host OK!\n"
}
else {
open(FICHERO, ">>errores.txt")||die "error!!!";
print FICHERO "FALLO en $host. ";
fechaHora();
close(FICHERO);
}
sleep(1);}
}
$p->close();
sub fechaHora {
my ($sec,$min,$hour,$day,$month,$yr20,@rest) = localtime(time);
print FICHERO "$day-".++$month. "-".($yr20+1900)." ";
print FICHERO sprintf("%02d",$hour).":".sprintf("%02d",$min).":".sprintf("%02d",$sec)."\n";
}
El funcionamiento es muy sencillo:
Creamos un array con los nombres de los servidores a los que el programa va a hacer continuamente PING.
Luego se intenta el PING. Si el servidor responde escribimos SERVIDOR OK. Si no responde abrimos el fichero ERRORES.TXT y escribimos la fecha y hora.
Curiosidades:
Cada vez que falla un PING abrimos el fichero, escribimos y volvemos a cerrar.
Lo tuve que hacer así porque el bucle infinito hay que terminarlo con Control+C o cerrando la ventana. Al interrumpir el programa antes de cerrar el fichero resulta que te encuentras con un ERRORES.TXT vacío.
Saludos.
No hay comentarios:
Publicar un comentario