Forum: Ruby Net::SSH performance question.

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
D19e410b9a96dbc4f8a4fda910addc1a?d=identicon&s=25 knohr (Guest)
on 2007-05-07 21:18
(Received via mailing list)
I am using Net::SSH to execute scripts on a remote server.  The script
that it executes takes a long time to complete, and dumps allot of
stuff to stdout.  If i allow the script to run as is, this causes ruby
(on the local machine) to eat up massive amounts of cycles, as it
parses the stdout.  Redirecting the stdout to /dev/null on the remote
box will fix the performance issue, but will cause me to lose my SSH
session due to inactivity.

Is there is a way to optimize the following code, (maybe having STDOUT
have a low buffer size)?
keep in mind:
A: i need ssh session to be persistent
B: i cannot modify the settings on the server
C: i really don't want to rewrite the perl script *~2000 lines*
D: i would prefer that the script does not move past the shell.perl
line until the script has completed on the remote box.

Net::SSH.start('foo', :username=>'bar', :password=>'') do |session|
copy_file(session, '/tmp/file')
shell = ("/tmp/file .")
shell.perl "test"
puts "done"
703fbc991fd63e0e1db54dca9ea31b53?d=identicon&s=25 Robert Dober (Guest)
on 2007-05-07 23:49
(Received via mailing list)
On 5/7/07, knohr <> wrote:
> keep in mind:
> ("/tmp/file .")
> shell.perl "test"
> puts "done"
> end
Hmm there is one question I would have? What do you need as
result/output, if I understood correctly nothing?
In that case maybe not using shell should help, the following works
perfectly on my box

Net::SSH.start( 'localhost' ) do |session|
  session.open_channel do | channel |
    channel.on_data do | ch, data |
      puts data
    channel.exec "find /home/robert -exec ls -ltr {} \\; >/dev/null"

It waits until the channel is closed.

This topic is locked and can not be replied to.