Siguiente: Comprobación a cada hora
Subir: Control de acceso
Anterior: p_remoto
  Índice General
Para la comprobación a cada minuto se ha creado el script cn_min, cuyo código
es el siguiente:
#!/usr/bin/perl -w
#-----------------------------------------------------------------------
# Programa: cn_min
# Version: 1.0
# Autor: Jesus Martin Ruiz
# Descripcion: Crea un demonio que se ejecuta a cada minuto para
# ejecutar la funcion check_1min, que compruba las conexiones
# activas que han expirado y deben ser expulsados del sistema.
#-----------------------------------------------------------------------
use lib '/usr/local/nocat/lib/';
use ControlNocat;
use DBI;
use Getopt::Std;
use strict;
#Usuario de la base de datos
my $user = USER;
my $passwd = PASSWD;
#Espedifica manejador y base de datos
my $driver = DRIVER_DB;
#Conectamos con la base de datos
my $dbh = DBI->connect($driver, $user, $passwd)
or &log ( "\nError ($DBI::err): $DBI::errstr\n");
my %opt;
getopts("F?" => \%opt);
if ( $opt{"?"} )
{
die <<END;
Argumentos de Control Nocat a cada minuto:
-F Modo en foreground.
-? Esta ayuda.
END
}
if ( $opt{"F"} )
{
print"Modo Foreground\n";
&check_1min($dbh);
}
else
{
my $childpid =fork;
if ($childpid != 0)
{
#El padre acaba
exit;
}
else
{
setpgrp (0, $$);
die "Ya esta corriendo" if (-e "/var/run/cn_min.pid");
open(FILE,">/var/run/cn_min.pid");
print FILE $$;
close(FILE);
my @hora=localtime(time);
#Esperamos a que los segundos esten en 59
my $espera=59-$hora[0];
sleep($espera);
#Borramos el archivo de bloqueo por si se ha matado el demonio
# cuando estaba dentro de la funcion.
unlink("/home/nocat/check_1min.lock")
if (-e "/home/nocat/check_1min.lock");
while (1)
{
my @hora=localtime(time);
#Esperamos a que los segundos esten en 00
while ( $hora[0] != 0 )
{
@hora=localtime(time);
}
&check_1min($dbh);
#Esperamos al siguiente minuto
sleep(59);
}
}
}
#Cerramos la conexion
$dbh->disconnect;
Este script hay que ejecutarlo en el servidor al iniciar el sistema y
se queda en background ejecutandose permanentemente. Cuando
se produce cualquier incidencia guarda un registro en nocat.log en el
home del usuario nocat.
Jesús Martín
2003-09-16