Mar Ago 29, 2006 4:04 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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 |
|
|
|

Mar Ago 29, 2006 7:20 am
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimado Explorer ,
¿ Qué tal?
Una vez más molestándote ...
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 !!
TELCO |
|

Mar Ago 29, 2006 8:33 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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' |
|

Mar Ago 29, 2006 8:37 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|
|
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 |
|

Mar Ago 29, 2006 1:19 pm
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimados ,
Posteo el script que funciona OK !!
Muchas gracias por todo a Explorer y también a Kidd
Un Abrazo.
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(); |
|
|

Mar Ago 29, 2006 2:50 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
| 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 |
|

Mie Ago 30, 2006 2:07 pm
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimados ,
Por alguna loca razón se me dañó el módulo de PERL " Net::FTP " . 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 !!
TELCO |
|

Mie Ago 30, 2006 2:23 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Jue Ago 31, 2006 6:42 am
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimado Explorer ,
Me sigue sin reconocer el parámetro -f y tengo la última versión estable instalada de Perl .
| 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 !!
TELCO |
|

Jue Ago 31, 2006 10:00 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Jue Ago 31, 2006 3:32 pm
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimado Explorer ,
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.
O sea que esta primer sentencia está correcta :
Pero estas otras no están funcionando o seguramente las estoy poniendo mal
¡¡ Saludos y gracias !!
TELCO |
|

Jue Ago 31, 2006 6:58 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Jue Ago 31, 2006 7:14 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
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; |
|
Vie Sep 01, 2006 8:03 am
|
 |
TELCO71
Perlero Nuevo

|
Registrado: 10 Ago 2006
Mensajes: 48
Ubicación: Buenos Aires / Argentina
|
|
|
|
|
Estimado Explorer ,
¿¿ 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 |
|
Vie Sep 01, 2006 8:22 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|