El mar, 14-03-2006 a las 22:16 -0300, Ricardo Marcelo Alvarez escribió:
> On Tue, 14 Mar 2006 21:31:15 -0300
> Angel Claudio Alvarez <[EMAIL PROTECTED]> wrote:
> 
> > El mar, 14-03-2006 a las 20:49 -0300, Ricardo Marcelo Alvarez escribió:
> > > On Tue, 14 Mar 2006 20:34:50 +0100
> > > Rober Morales <[EMAIL PROTECTED]> wrote:
> > > 
> > > > El Martes, 14 de Marzo de 2006 20:24, Ricardo Marcelo Alvarez escribió:
> > > > > > Si lo puedes leer tú problema posiblemente estará en el script. 
> > > > > > Comprueba
> > > > > > q las rutas sean absolutas y las variables q utilizas a ver si hay
> > > > > > suerte.
> > > > > >
> > > > > > Saludos
> > > > >
> > > > > El script como root funciona bien, el problema es como usuario, 
> > > > > incluso
> > > > > saque el stdout y stderr hacia un archivo y es ahi donde me aparece 
> > > > > que no
> > > > > tiene permisos para leer ese archivo. En el log deja esto
> > > > >
> > > > > Error opening /var/log/apache2/transfer_pg.log: Permiso denegado at
> > > > > /usr/local/gnupanel/mide-trafico-http.pl line 137
> > > > 
> > > > el archivo debe tener permisos de lectura para el usuario/grupo (esto 
> > > > creo que 
> > > > está)
> > > > 
> > > > Y
> > > > 
> > > > la ruta debe ser recorrible. Es decir, cada directorio debe tener 
> > > > permisos de 
> > > > apertura (x) para el usuario/grupo desde "/" o desde donde se ejecute 
> > > > el 
> > > > script.
> > > > 
> > > > prueba con ello.
> > > > 
> > > 
> > > Aca mando los permisos de toda la ruta de directorios
> > > 
> > > gnupanel:/# ls -l -d /var 
> > > drwxr-xr-x  14 root root 4096 2006-02-20 20:03 /var
> > > gnupanel:/# ls -l -d /var/log
> > > drwxr-xr-x  13 root root 4096 2006-03-14 06:25 /var/log
> > > gnupanel:/# ls -l -d /var/log/apache2 
> > > drwxr-xr-x  2 root root 4096 2006-03-13 03:00 /var/log/apache2
> > > gnupanel:/# ls -l -d /var/log/apache2/
> > > access.log         error.log          error.log.1        transfer.log     
> > >   transfer.log.1     transfer_pg.log    transfer_pg.log.1  
> > > gnupanel:/# ls -l -d /var/log/apache2/transfer_pg.log
> > > -rw-r-----  1 root adm 1900 2006-03-14 20:38 
> > > /var/log/apache2/transfer_pg.log
> > > gnupanel:/# 
> > > 
> > > 
> > > Saludos.
> > > 
> > El usuario que ejecuta el daemon esta en el grupo adm?
> > Ejecutaste el script sin daemonizar??
> > Podes postear el codigo??
> > > 
> Aca va el codigo, la parte donde el script cambia el usuario esta comentada
> #############begin###################
> 
> #!/usr/bin/perl
> 
> use File::Tail;
> use Pg;
> 
>     sub senal_de_fin
>       {
>           my $signal = shift;
>           $SIG{$signal} = \&senal_de_fin;
>           close MENSAGES;
>           exit(0);
>       }
> 
>     sub senal_de_kill
>       {
>           my $signal = shift;
>           $SIG{$signal} = \&senal_de_kill;
>           close MENSAGES;
>           exit(0);
>       }
> 
> sub analiza_http
>     {
>     my $renglon = $_[0];
>     my $conexion = $_[1];
>     my $logueo = $_[2];
>     open(MENSHTTP,">> $logueo");
>     @datos = NULL;
>     @datos = split(' ',$renglon);
>     $dominio = $datos[0];
>     $transferencia = $datos[1];
>     my $result = NULL;
>     $result = $conexion->exec("BEGIN");
>     $sql = "SELECT dominio FROM gnupanel_transferencias WHERE 
> dominio='$dominio' ";
>     $result = $conexion->exec($sql);
>     $result = $conexion->getResult;
>     
>     if($result)
>       {
>       $sql = "UPDATE gnupanel_transferencias SET http = http + $transferencia 
> WHERE dominio = '$dominio' ";
>       $result = $conexion->exec($sql);
>       $estado = $result->resultStatus;
> 
>       $sql = "UPDATE gnupanel_transferencias SET total = http + ftp + smtp + 
> pop3 WHERE dominio = '$dominio' ";
>       $result = $conexion->exec($sql);
>       $estado = $estado && $result->resultStatus;
> 
>       if($estado == PGRES_COMMAND_OK)
>           {
>           $result = $conexion->exec("END");
>           }
>       else
>           {
>           $mensaje = $conexion->errorMessage;
>           print MENSHTTP $mensaje;
>           $result = $conexion->exec("ROLLBACK");
>           }
>       }
>     else
>       {
>       $mensaje = "No se hace nada \n";
>       print MENSHTTP $mensaje;
>       $result = $conexion->exec("END");
>       }
>       
>     close MENSHTTP;
>     }
>     
> 
> #######################################################################################################################
> ## Put ourselves in background if not in debug mode. 
> require "/etc/gnupanel/gnupanel.conf.pl";
> 
> $nombre = $0;
> $nombre = substr($nombre,rindex($nombre,"/")+1,length($nombre)-1);
> 
> $logueo = "/var/log/".$nombre.".log";
> $pidfile = "/var/run/".$nombre.".pid";
> $conexion = NULL;
> 
> open(STDERR, ">> $logueo");
> 
> $SIG{'TERM'} = \&senal_de_fin;
> $SIG{'KILL'} = \&senal_de_kill;
> 
>     if (open(TTY, "/dev/tty"))
>       {
>           ioctl(TTY, $TIOCNOTTY, 0);
>           close(TTY);
>       }
> 
>     $definida = setpgrp(0, 0);
> 
>     $proceso = getppid;
> 
>     $child_pid = fork;
> 
>     if ( $child_pid != 0)
>       {
>           print "Inicializando el medidor de trafico de HTTP \n";
>           exit(0);
>       }
>     else
>       {
> 
> #Inicio del programa
>           open(STDOUT, ">> $logueo");
>           open(PIDO,"> $pidfile");
>           print PIDO "$$ \n";
>           close PIDO;
> 
> #         my ($login,$pass,$uid,$gid) = getpwnam($usuario);
> #         $( = $gid;
> #         $) = $gid;
> #         $< = $uid;
> #         $> = $uid;
> #
> #         if (  ((split(/ /,$)))[0] ne $gid) || ((split(/ /,$())[0] ne $gid)  
> ) 
> #             {
> #             open(MENSAGES,">> $logueo");
> #             print MENSAGES "No se pudo cambiar el GID \n";
> #             close MENSAGES;
> #             }
> #      
> #         if (  ($> ne $uid) || ($< ne $uid)  )
> #             {
> #             open(MENSAGES,">> $logueo");
> #             print MENSAGES "No se pudo cambiar el UID \n";
> #             close MENSAGES;
> #             }
> #
> #         undef($login);
> #         undef($pass);
> #         undef($uid);
> #         undef($gid);
> 
>           $file = 
> File::Tail->new(name=>$archivo_log_http,interval=>1,maxinterval=>1,adjustafter=>1);
>           $conexion = NULL;
>           $conexion = Pg::connectdb("dbname=$database host=localhost 
> user=$userdb password=$pasaportedb");
>           
>           while(1)
>               {
>               $estado = $conexion->status;
>               
>               if($estado==PGRES_CONNECTION_OK)
>                   {
>                   while(defined($linea=$file->read))
>                       {
>                           chop($linea);
>                           analiza_http($linea,$conexion,$logueo);
>                       }
>                   }
>               else
>                   {
>                   $mensaje = $conexion->errorMessage;
>                   open(MENSAGES,">> $logueo");
>                   print MENSAGES $mensaje;
>                   close MENSAGES;
>                   $conexion->reset;
>                   }
>               }
> 
> #fin del programa
>       }
>     
> $end = 0;
> 
> 
> ###############################################################################################################################################################
> #############end#####################
> 
> En el archivo /etc/gnupanel/gnupanel.conf.pl
> 
> estan definidas las siguientes variables
> 
> 
> #############begin###################
> 
> $database = "gnupanel";
> $userdb = "gnupanel";
> $pasaportedb = "XXXXXXXXXXX";
> 
> $archivo_log_mail = "/var/log/mail.log";
> $archivo_log_ftp = "/var/log/proftpd/proftpd.log";
> $archivo_log_http = "/var/log/apache2/transfer_pg.log";
> $archivo_log_https = "/var/log/apache-ssl/transfer_pg.log";
> 
> $tiempo_dir = 900;
> $directorio_raiz_sitios = "/var/www/sitios";
> $directorio_raiz_correo = "/var/mail/correos";
> 
> $usuario = "gnupanelex";
> $grupo = "gnupanelex";
> 
> #############end#####################
> 
> saludos.
> 
> 
> 
> 
> > > 
> > > > -- 
> > > > "Como no sabían que era imposible, lo hicieron!"
> > > > 
> > > > Rober Morales Chaparro
> > > > 
> > > > 
> > -- 
> > Angel Claudio Alvarez
> > Usuario Linux Registrado 143466
> > GPG Public Key en http://pgp.mit.edu
> > key fingerprint = 3AED D95B 7E2D E954 61C8  F505 1884 473C FC8C 8AC4
> > 
> > 

No entiendo para que cambias el usuario Por que no lo ejecutas
directamente como el usuario??
Es necesario que utilices File::Tail??
El problema puede estar en ese modulo o que al cambiar de usuario este
no tenga entorno, por eso te recomiendo ejecutarlo directamente como
usuario ( con su - usuario)

-- 
Angel Claudio Alvarez
Usuario Linux Registrado 143466
GPG Public Key en http://pgp.mit.edu
key fingerprint = 3AED D95B 7E2D E954 61C8  F505 1884 473C FC8C 8AC4

Attachment: signature.asc
Description: Esta parte del mensaje está firmada digitalmente

Responder a