Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: using Net::OpenSSH in a MCE worker thread

by salva (Abbot)
on Jun 28, 2013 at 10:01 UTC ( #1041208=note: print w/ replies, xml ) Need Help??


in reply to using Net::OpenSSH in a MCE worker thread

Activate the module debugging mode...

$Net::OpenSSH::debug = -1;
and post here what you get.


Comment on Re: using Net::OpenSSH in a MCE worker thread
Download Code
Re^2: using Net::OpenSSH in a MCE worker thread
by Andy16 (Acolyte) on Jun 28, 2013 at 10:51 UTC
    Hi - sorry, but
    => debug did not do any lines
    => no furhter message than "just gone" ....

    meanwhile (see above) I'm sure it is realted to an eval loading a missing pm...

    thanks!

      taken from OpenSSH.pm


      sub _load_module { my ($module, $version) = @_; $loaded_module{$module} ||= do { do { local ($@, $SIG{__DIE__}); eval "require $module; 1" } or croak "unable to load Perl module $module"; 1 }; if (defined $version) { local ($@, $SIG{__DIE__}); my $mv = eval "\$${module}::VERSION" || 0; (my $mv1 = $mv) =~ s/_\d*$//; croak "$module version $version required, $mv is available" if $mv1 < $version; } 1 }


      somewhere in here it breaks... if pm not preloaded and in MCE context.

        oops, there is a bug in that part of the code that causes it to fail silently (instead of failing with an error that tells you what has gone wrong).

        Try replacing it by the following version:

        sub _load_module { my ($module, $version) = @_; $loaded_module{$module} ||= do { do { local ($@, $SIG{__DIE__}); eval "require $module; 1" } or croak "unable to load Perl module $module"; 1 }; if (defined $version) { my $mv = do { local ($@, $SIG{__DIE__}); eval "\$${module}::VERSION" || 0; }; (my $mv1 = $mv) =~ s/_\d*$//; croak "$module version $version required, $mv is available" if $mv1 < $version; } 1 }
Re^2: using Net::OpenSSH in a MCE worker thread
by marioroy (Sexton) on Dec 13, 2014 at 03:25 UTC
    Hi all,

    MCE has gone through several revisions since the time the OP tested this. I tested without IO::Pty on my box. Amazingly, running (yum install perl-Net-OpenSSH) installed the package without checking the perl-IO-Tty dependency.

    Workers in older MCE revisions closed STDOUT/STDERR prior to exiting. That was fix some time back.

    $ ./mce_openssh.pl child(1): doing ssh unable to load Perl module IO::Pty: Can't locate IO/Pty.pm in @INC (@I +NC contains: /media/psf/shm/trunk/examples/../lib /usr/local/lib64/pe +rl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/pe +rl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 10) lin +e 1, <__ANONIO__> line 2. at /usr/share/perl5/vendor_perl/Net/OpenSSH.pm line 756.

    Btw, the script works after installing IO::Tty (yum install perl-IO-Pty).

    my $sshuser = 'remote_userid'; my $sshpwd = 'remote_passwd'; my $device = 'remote_device'; use MCE::Flow max_workers => 1; use Net::OpenSSH; mce_flow sub { my $wid = MCE->wid; MCE->sendto('stdout', "child($wid): doing ssh\n"); my $ssh = Net::OpenSSH->new( $device, user => $sshuser, passwd => $sshpwd, master_opts => [-o => "StrictHostKeyChecking=no"], master_stderr_discard => 1 ); MCE->sendto('stdout', "child($wid): did ssh - not shown!!! \n"); };

    In summary, STDERR output is no longer lost with current MCE releases.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1041208]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (14)
As of 2014-12-18 16:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (58 votes), past polls