[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Net::SSH performance question.

knohr

5/7/2007 6:28:00 PM

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 = session.shell.sync
shell.mv ("/tmp/file .")
shell.perl "test"
puts "done"
end

1 Answer

Robert Dober

5/7/2007 8:24:00 PM

0

On 5/7/07, knohr <just_a_techie200x@yahoo.com> wrote:
> 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 = session.shell.sync
> shell.mv ("/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
end
channel.exec "find /home/robert -exec ls -ltr {} \\; >/dev/null"
end
session.loop
end

It waits until the channel is closed.

HTH
Robert

--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw