• Publicidad

Problema con módulo Net::Rsh con control flujo por timeout

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Problema con módulo Net::Rsh con control flujo por timeout

Notapor mjimenez » 2008-12-12 10:04 @461

Hola, tengo un grave problema de control de flujo, resulta que no tengo control en Perl sobre el módulo de RSH, así que cuando hago un rsh a una máquina remota, y ésta a su vez tiene el servicio mal, no me da la posibilidad de hacer un timeout y proseguir por ejemplo con la siguiente máquina si tuviese un listado de maquinas para hacer diversas conexiones...

Este es el código, a ver si alguien pudiese echarle un vistazo, gracias:

Script original (cortado, solo dejo lo interesante, el control del flujo)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use Net::Ping;
use Net::Ifconfig::Wrapper;
use Net::Rsh;

... ...

PropagateStatus(@NodeList,$ProxyNo);
sub PropagateStatus {

    local *listnodes=@_[0];

    # Set remote status files to itself as the MasterProgram
    local $command = "echo " .$_[1] ." > " .$status_file;
    local $rsh_connection=Net::Rsh->new();
    foreach (@listnodes) {
        chomp($_);
        print "RSH access to " ."-$username\@$_- \n";
        print "Executing: $command at remote host\n";
        @tmp=$rsh_connection->rsh($_,$username,$username,$command);
    }
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Hace una conexión rsh al primer nodo disponible pero si falla no es capaz de seguir con el siguiente nodo del array nodelist.
Aquí he encontrado una posible solución, ¿podríais echarle un ojo para revisar si está correcto? ¿o si disponéis de alguna otra posible solución?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
local $rsh_connection=Net::Rsh->new();
foreach (@listnodes) {
    $SIG{ALRM} = \&temporizador;
    $time=10;
    eval {
        alarm($time);

        chomp($_);
        print "RSH access to " ."-$username\@$_- \n";
        print "Executing: $command at remote host\n";
        @tmp=$rsh_connection->rsh($_,$username,$username,$command);
    }
}

alarm(0);
};
if ($@ =~ /End of timer/) {
    print "Returns timer code\n";
}
else {
    print "Returns no code: $res\n";
}

sub temporizador {
    # how its added
    die "Timeup of timer";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias, un saludo.
mjimenez
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2008-12-12 10:01 @459

Publicidad

Notapor explorer » 2008-12-12 18:31 @813

Bienvenido a los foros de Perl en Español, mjimenez.

Yo creo que sí. Leyendo al principio tu mensaje, lo primero que pensé fue en la posibilidad del alarm().

Pero también hay cosas interesantes, como el programa slrsh, que ejecuta comandos en varias máquinas, incluso a la vez.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron