Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problemas con el módulo " DateTime " de Perl
Ir a página Anterior  1, 2
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar Ago 29, 2006 4:04 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Creo que hay un problema en la línea del system(). Está la variable $ARCHIVO, pero como tiene un guión bajo al lado, puede que no salga su valor. Mejor entonces escaparla con un ${ARCHIVO}.

Luego, el put de Net::FTP no admite comodines ni es recursivo. Tendrás que ir fichero a fichero o usar otro módulo.

Ultima edición por explorer el Jue Ago 07, 2008 12:30 pm, editado 1 vez
Mensaje Mar Ago 29, 2006 7:20 am
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimado Explorer , Wink

¿ Qué tal?
Una vez más molestándote ... Embarassed
Aquí corregí un poco mi script , ¿ podrías debugearlo un poco ?

Dudas :
_______

1) Luego de ejecutarlo me da el siguiente error :

¿¿ Hay algún problema con las sentencias en las que obtengo la fecha para ponerle a los archivos ??
¿ Qué estoy haciendo mal ?

Código:
[root@localhost ~]# perl FTP_script.pl
Global symbol "$sec" requires explicit package name at FTP_script.pl line 24.
Global symbol "$min" requires explicit package name at FTP_script.pl line 24.
Global symbol "$hour" requires explicit package name at FTP_script.pl line 24.
Global symbol "$mday" requires explicit package name at FTP_script.pl line 24.
Global symbol "$mon" requires explicit package name at FTP_script.pl line 24.
Global symbol "$year" requires explicit package name at FTP_script.pl line 24.
Global symbol "$wday" requires explicit package name at FTP_script.pl line 24.
Global symbol "$yday" requires explicit package name at FTP_script.pl line 24.
Global symbol "$isdst" requires explicit package name at FTP_script.pl line 24.
Global symbol "$year" requires explicit package name at FTP_script.pl line 25.
Global symbol "$year" requires explicit package name at FTP_script.pl line 25.
Global symbol "$mon" requires explicit package name at FTP_script.pl line 26.
Global symbol "$mon" requires explicit package name at FTP_script.pl line 26.
Global symbol "$fecha" requires explicit package name at FTP_script.pl line 27.
Global symbol "$year" requires explicit package name at FTP_script.pl line 27.
Global symbol "$mon" requires explicit package name at FTP_script.pl line 27.
Global symbol "$mday" requires explicit package name at FTP_script.pl line 27.
Global symbol "$hour" requires explicit package name at FTP_script.pl line 27.
Global symbol "$min" requires explicit package name at FTP_script.pl line 27.
Global symbol "$fecha" requires explicit package name at FTP_script.pl line 30.
Global symbol "$fecha" requires explicit package name at FTP_script.pl line 31.
Bareword found where operator expected at FTP_script.pl line 37, near "${ARCHIVO}_"
FTP_script.pl has too many errors.
[root@localhost ~]#


¡¡ Saludos y Muchas Gracias !! Very Happy
TELCO
Mensaje Mar Ago 29, 2006 8:33 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

La programación con 'use strict' obliga a declarar todas las variables globales como pertenecientes a un determinado paquete. Eso es lo que dice el error.
Pon un my delante de la declaración de cada variable o quita el 'use strict'
Mensaje Mar Ago 29, 2006 8:37 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Tenías varios problemas, lo primero es que debido a que estas usando el pragma strict es necesario que incializes correctamente todas tus variables, luego tenías un problema de sintáxis en la variable de put.

Aquí está el código corregido que te debe de jalar correctamente:

Perl:
#!/usr/bin/perl -w

use strict;
use Net::FTP;

no warnings;

my $USERNAME = "user";
my $PWD = "passw";
my $SERVER = "ip";
my $ARCHIVO = "LOGS";

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$year=$year+1900;
$mon=$mon+1;

my $fecha = "YMD_$year-$mon-$mday\_HM_$hour:$min";

# Empaqueto todos los archivos de log´s del directorio /root/LOGS/
system("tar cvf ${ARCHIVO}_$fecha.tar /root/LOGS/");

# Comprimo el archivo .tar
system("gzip /root/LOGS/${ARCHIVO}_$fecha.tar");

# Subo el archivo comprimido a un FTP Server ... ( o eso intento je )

my $FTP = Net::FTP->new($SERVER) or die ("No se pudo conectar $!");
   $FTP->login($USERNAME,$PWD) or die ("Login incorrecto: $!");
   $FTP->cwd("/root/LOGS/") or die("No se pudo ejecutar cwd: $!");

$FTP->put("$ARCHIVO"."_$fecha.tar.gz") or die("No se pudo hacer upload del archivo: $!");

$FTP->quit();



Saludos
Mensaje Mar Ago 29, 2006 1:19 pm
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimados , Very Happy

Posteo el script que funciona OK !!

Muchas gracias por todo a Explorer y también a Kidd
Un Abrazo. Wink
TELCO


Perl:
#!/usr/bin/perl -w

use Net::FTP;

no warnings;

my $USERNAME = "user";
my $PWD = "pass";
my $SERVER = "ip_ftp_server";

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$year=$year+1900;
$mon=$mon+1;

my $fecha = "$year-$mon-$mday";


# Acá se empaquetan todos los archivos que se encuentran dentro del dir " /root/LOGS/ "

system("tar cvf BACKUPS_$fecha.tar /root/LOGS/");

# Acá se comprime el archivo que se empaquetó con TAR en el paso anterior

system("gzip /root/BACKUPS_$fecha.tar");

#En esta parte se sube en Archivo empaquetado y comprimido a un Server de FTP

my $FTP = Net::FTP->new($SERVER) or die ("No se pudo conectar $!");
   $FTP->login($USERNAME,$PWD) or die ("Login incorrecto: $!");

$FTP->put("BACKUPS_$fecha.tar.gz") or die("No se pudo hacer upload del archivo: $!");

$FTP->quit();
Mensaje Mar Ago 29, 2006 2:50 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Perl:
#!/usr/bin/perl
use Net::FTP;
use strict;
no warnings;

use constant {
    USUARIO  => "user",
    PASSW    => "pass",
    SERVIDOR => "ip_ftp_server",
};

my ($dia,$mes,$anno) = (localtime)[3,4,5]; $anno+= 1900; $mes++;
my $fichero = "BACKUPS_$anno-$mes-$dia.tar.gz";

system("tar czvf $fichero /root/LOGS/");

my  $ftp= Net::FTP->new(SERVIDOR)  or die "No se pudo conectar: $!\n";
    $ftp->login(USUARIO, PASSW)    or die "Login incorrecto: $!\n";
    $ftp->put($fichero)            or die "No se pudo hacer upload del archivo: $!\n";
    $ftp->quit();


Ultima edición por explorer el Jue Ago 07, 2008 12:47 pm, editado 1 vez
Mensaje Mie Ago 30, 2006 2:07 pm
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimados Very Happy ,

Por alguna loca razón se me dañó el módulo de PERL " Net::FTP " Embarassed . Intenté reinstarlo ... pero tengo problemas para subir los archivos con el comando put. Aclaro que estuvo funcionando perfectamente el script y luego que actualicé la versión de PERL a la 5.8.8 detecté este problema.
Se puede hacer lo siguiente con los comandos system (" ");

Perl:
my $FTP = Net::FTP->new($SERVER) or die ("No se pudo conectar $!");
$FTP->login($USERNAME,$PWD) or die ("Login incorrecto: $!");
$FTP->put("BACKUPS_$fecha.zip") or die("No se pudo hacer upload del archivo: $!");
$FTP->quit();

Como sería hacer lo mismo desde los comandos system ?

Saludos y muchas Gracias !! Wink
TELCO
Mensaje Mie Ago 30, 2006 2:23 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Prueba a reinstalar el módulo Net::FTP con el comando cpan -f Net::FTP.

Para hacer lo mismo desde system, tendrás que aprender a usar el comando ftp y a personalizar su fichero de configuración.
Mensaje Jue Ago 31, 2006 6:42 am
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimado Explorer , Very Happy

Me sigue sin reconocer el parámetro -f y tengo la última versión estable instalada de Perl . Embarassed

Código:
[root@localhost ~]# cpan -f Net::FTP
Unknown option: f
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
  Database was generated on Wed, 30 Aug 2006 04:32:29 GMT
Net::FTP is up to date.
[root@localhost ~]# perl -v

This is perl, v5.8.8 built for i686-linux

Copyright 1987-2006, Larry Wall


Me explicas cómo hacerlo con system(" "); ya que creo que no tendría mas problemas como los que me ocurrieron actualmente con el módulo de Net::FTP .

¡¡ Saludos y gracias !! Wink
TELCO
Mensaje Jue Ago 31, 2006 10:00 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Yo el cpan que tengo es la versión 1.87: cpan -v.
Y sobre el system, tienes que poner dentro de él las mismas instrucciones que harías con el comando ftp. Haz un man ftp para saber los detalles, sobre todo los concernientes a cómo has de crear el fichero .netrc, que guardará el nombre de usuario y contraseña de la conexión, y la macro init que se encargará de hacer el transporte de tus ficheros.
Mensaje Jue Ago 31, 2006 3:32 pm
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimado Explorer Very Happy ,

Mi versión de CPAN es la :

Código:
[root@localhost ~]# cpan -v
cpan script version 1.03
CPAN.pm version 1.7602
[root@localhost ~]#


Ya creé mi archivo .netrc para automatizar la conexión al FTP y funciona perfecto ya que se conecta automáticamente sin pedir user y pass.
Cuando corro mi script con las siguientes sentencias se establece la conexión pero se queda esperando con el FTP establecido al equipo remoto que le pase los comandos.
Código:
ftp>


O sea que esta primer sentencia está correcta :

Perl:
system("ftp ip");


Pero estas otras no están funcionando o seguramente las estoy poniendo mal

Perl:
system("put BACKUPS_$fecha.zip");
system("bye");


¡¡ Saludos y gracias !! Wink
TELCO
Mensaje Jue Ago 31, 2006 6:58 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Una vez iniciada la sesión con ftp a través de system, no puedes enviarle ningún parámetro hasta que el ftp termine.

Eso quiere decir que las instrucciones de put deberán ir en la macro init dentro de .netrc.

Y eso también quiere decir que si tienes que indicarle qué fichero de backups quiere que transmita, tienes que personalizar el fichero .netrc antes de llamar al ftp.

Esto último lo puedes hacer con algún sistema de plantillas, que genere el .netrc con tu fichero de Backup.
Mensaje Jue Ago 31, 2006 7:14 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 478
Ubicación: Frente al monitor
Responder citando

Aunque no lo digo a tiempo, no sobra.
Hay un prgagma que podés usar mientras haces el código que te trae documentos de POD cuando hay un error:
use diagnostics;
Mensaje Vie Sep 01, 2006 8:03 am
TELCO71
Perlero Nuevo
Perlero Nuevo
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
Responder citando

Estimado Explorer , Very Happy

¿¿ Cómo puedo actualizar mi versión de CPAN para que me reconozca el comando " -fi " que me pasaste ??
Mi idea es utilizar el módulo de Net::FTP que me está fallando al subir los archivos por FTP .

¡¡ Saludos y muchas gracias !!!
TELCO
Mensaje Vie Sep 01, 2006 8:22 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4083
Ubicación: Valladolid, España
Responder citando

Código:
cpan Bundle::CPAN
o
Código:
perl -MCPAN -e 'install Bundle::CPAN'

Atención: Net::FTP viene incluído en la distribución base de Perl, así que si has actualizado el Perl tuyo, también has actualizado Net::FTP.

Otra cosa, me he dado cuenta de que el comando cpan no admite mas que un sólo parámetro de entrada, así que entonces deberás probar con cpan -f Net::NTP.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Ir a página Anterior  1, 2
Página 2 de 2



Powered by phpBB © 2001, 2005 phpBB Group