in reply to Re^4: Script hangs when executing command over ssh
in thread Script hangs when executing command over ssh

Your answer still leaves me believing you're not getting my point.

Thus, I'm hoping that removing the 1>&2from your script might prevent the hanging under all cases.

But it might not. Won't know until you try it against all known cases that currently cause it to hang.

Replies are listed 'Best First'.
Re^6: Script hangs when executing command over ssh
by eg2014 (Initiate) on Jun 18, 2015 at 19:39 UTC
    Thank you again for your help. Points 1-3 are correct but 3-4 are not. The original program writes the data to STDERR and hangs. I have demonstrated the behavior using the script above for simplicity - but in fact the behavior is the same using a program which writes to STDERR and the above example which uses redirection to write to STDERR.

      Ah, sorry -- I didn't quite catch what you'd meant.

      You're saying that when you use a program that writes to STDERR, you are not additionally using the re-piping?

      Okay.

      So maybe there's a 32K limit on STDERRwhen run through $ssh->cmd-- and maybe that's tunable, still waiting on other Monks to respond on that point. But, an idea --

      Maybe you can work around the limitation by piping only STDERRand piping it to its own file instead of capturing it on the $ssh->cmdcall, and then transfer the resulting file back:

      my ($stdout, $stderr, $exit) = $ssh->cmd('/tmp/b 2>/tmp/b.err'); # Now read /tmp/b.err from remote system to get STDERR output. # Don't forget to delete /tmp/b.err on the remote system when you're d +one

      If that doesn't work around the issue, or if it's not an option to write to the remote /tmpdirectory, I think I'm out.  :-(

      Edit: Clarified remote file as being in /tmp and added note about remote file cleanup

        Thank you and this is a good suggestion.

        In debugging I have found that perl hangs in Net::SSH::Perl::SSH2 in the routine 'sub client_loop' in the line 'my($rready, $wready) = $select_class->select($rb, $wb);' but I do not have enough understanding to see why. I hope you or some kind monks can shed some light on this.

        Also it is strange the same works with output to STDOUT.