next up previous contents
Siguiente: Comprobación a cada hora Subir: Control de acceso Anterior: p_remoto   Índice General

Comprobación a cada minuto

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
e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


SISTEMA DE CONTROL, TARIFICACIÓN Y ADMINISTRACIÓN DEL ACCESO A INTERNET DESDE REDES HETEROGÉNEAS

: Martín Ruiz, Jesús
: Ingeniería Telecomunicación
Contenido del proyecto: