Hace poco empecé a realizar desarrollos en Perl. Recientemente generé un script que se conecta a un servidor y me trae archivos de acuerdo a la fecha de los archivos. Esto funcionaba bien para ese servidor, pero al aplicar el script en otro servidor me di cuenta que al ejecutar el script al momento del get se quedaba como pausado un tiempo y seguía, el archivo en el que se queda pausado el método get no lo trae.
Mi consulta es saber si es que hay alguna manera de saber si el archivo remoto está siendo tomado por un proceso X y por eso el get me da time out, o en el caso contrario, salir del ftp para validar si me traje el archivo.
Mi script es el siguiente.
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- #Conexiones FTP para traer archivos
- #Autor EDG
- use strict;
- use POSIX qw/ strftime/;
- use Net::FTP;
- my $user = "usuario";
- my $pass = "password";
- #Conexión a FTP
- my $ftp = Net::FTP -> new("192.168.102.XX") or die ("No se pudo establecer conexion: $!");
- $ftp ->login($user,$pass) or die("Login incorrecto: $!");
- my $fecha_actual = strftime('%Y%m%d', localtime(time));
- #my $fecha_actual = "20111206";
- sub PWD
- {
- my $dir = $ftp->pwd();
- print "$dir\n";
- }
- $ftp->cwd("ruta donde estan los archivos (/root/algo)");
- my @contenido = $ftp->ls();
- print "#### Carga de Archivos servidor ####\n";
- my $index = 0;
- my $cantidad = 0;
- foreach (@contenido) {
- my $tiempo = $ftp -> mdtm("$contenido[$index]");
- my $convert =strftime('%Y%m%d',localtime($tiempo));
- if ($convert == $fecha_actual)
- {
- $ftp -> get ("$contenido[$index]","/rutadestino/$contenido[$index]");
- print "Se trasnfiere Archivo : $contenido[$index]\n";
- $cantidad ++;
- }
- $index ++;
- }
- open (SALIDA, " >/logdearchivosFTP/control_ftp.txt");
- print SALIDA $cantidad."\n";
- close (SALIDA);
- $ftp->quit or die("No se puede desconectar del servidor: $!");
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4