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 <angel@angel-alvarez.com.ar> 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 <ultimozar@hotmail.com> 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 =?ISO-8859-1?Q?est=E1?= firmada digitalmente