[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Net::SSH serialized commands

lyrics

1/14/2009 5:00:00 PM

Hi,
I am using Net::SSH v2
I want to execute a command when the first one is complete.
But I can't make it working.
Here is my code:

Net::SSH.start( addr, user, :password => passwd) do |session|
session.exec! ("service X restart")
session.exec!("<command to configure service X>")
end

The issue is that the second "session.exec!" is executed before
service is restarted.

I guess I am not doing the right way but I don't know how to do it.
Can someone help me,please?

lyrics
8 Answers

Sebastian W.

1/14/2009 9:13:00 PM

0

lyrics wrote:
> Hi,
> I am using Net::SSH v2
> I want to execute a command when the first one is complete.
> But I can't make it working.
> Here is my code:
>
> Net::SSH.start( addr, user, :password => passwd) do |session|
> session.exec! ("service X restart")
> session.exec!("<command to configure service X>")
> end
>
> The issue is that the second "session.exec!" is executed before
> service is restarted.
>
> I guess I am not doing the right way but I don't know how to do it.
> Can someone help me,please?
>
> lyrics

Not sure if this would accomplish what you are looking for, but you
could try just doing this:

Net::SSH.start( addr, user, :password => passwd) do |session|
session.exec! ("service X restart; <command to configure service X>")
end
--
Posted via http://www.ruby-....

lyrics

1/14/2009 10:15:00 PM

0

On 14 jan, 22:12, "Sebastian W." <switt...@yahoo.com> wrote:
> lyrics wrote:
> > Hi,
> > I am using Net::SSH v2
> > I want to execute a command when the first one is complete.
> > But I can't make it working.
> > Here is my code:
>
> > Net::SSH.start( addr, user, :password => passwd) do |session|
> >  session.exec! ("service X restart")
> >  session.exec!("<command to configure service X>")
> > end
>
> > The issue is that the second "session.exec!" is executed before
> > service is restarted.
>
> > I guess I am not doing the right way but I don't know how to do it.
> > Can someone help me,please?
>
> > lyrics
>
> Not sure if this would accomplish what you are looking for, but you
> could try just doing this:
>
> Net::SSH.start( addr, user, :password => passwd) do |session|
>  session.exec! ("service X restart; <command to configure service X>")
> end
> --
> Posted viahttp://www.ruby-....

Thanks for replying.
The solution isn't suitable.
I need to execute other commands on another ssh connexion.
Actually, my code is more like this:

Net::SSH.start( addr, user, :password => passwd) do |session1|
Net::SSH.start( addr2, user2, :password => passwd2) do |session2|
session1.exec! ("service X restart;")
session2.exec! ("<command...>")
session1.exec! ("<command ...>")
end
end

Sebastian W.

1/14/2009 10:31:00 PM

0

lyrics wrote:
> On 14 jan, 22:12, "Sebastian W." <switt...@yahoo.com> wrote:
>> > end
>> could try just doing this:
>>
>> Net::SSH.start( addr, user, :password => passwd) do |session|
>> �session.exec! ("service X restart; <command to configure service X>")
>> end
>> --
>> Posted viahttp://www.ruby-....
>
> Thanks for replying.
> The solution isn't suitable.
> I need to execute other commands on another ssh connexion.
> Actually, my code is more like this:
>
> Net::SSH.start( addr, user, :password => passwd) do |session1|
> Net::SSH.start( addr2, user2, :password => passwd2) do |session2|
> session1.exec! ("service X restart;")
> session2.exec! ("<command...>")
> session1.exec! ("<command ...>")
> end
> end

Hm...that looks a bit odd to me. Why do the sessions have to be nested?

If you need to do more advanced stuff - which it sounds like - "exec!"
probably will not suffice as it is just a convenience method.

Here is the Net::SSHv2 docs, they're very helpful:
http://net-ssh.rubyforge.org/ssh/v2/api/...

What you are likely looking for is to use Net::SSH::Multi (maybe), build
up an aggregated event loop, and then run it with the "loop" method.

--
Posted via http://www.ruby-....

lyrics

1/14/2009 10:47:00 PM

0

On 14 jan, 23:31, "Sebastian W." <switt...@yahoo.com> wrote:
> lyrics wrote:
> > On 14 jan, 22:12, "Sebastian W." <switt...@yahoo.com> wrote:
> >> > end
> >> could try just doing this:
>
> >> Net::SSH.start( addr, user, :password => passwd) do |session|
> >> session.exec! ("service X restart; <command to configure service X>")
> >> end
> >> --
> >> Posted viahttp://www.ruby-....
>
> > Thanks for replying.
> > The solution isn't suitable.
> > I need to execute other commands on another ssh connexion.
> > Actually, my code is more like this:
>
> > Net::SSH.start( addr, user, :password => passwd) do |session1|
> >   Net::SSH.start( addr2, user2, :password => passwd2) do |session2|
> >     session1.exec! ("service X restart;")
> >     session2.exec! ("<command...>")
> >     session1.exec! ("<command ...>")
> >   end
> > end
>
> Hm...that looks a bit odd to me. Why do the sessions have to be nested?
>
> If you need to do more advanced stuff - which it sounds like - "exec!"
> probably will not suffice as it is just a convenience method.
>
> Here is the Net::SSHv2 docs, they're very helpful:http://net-ssh.rubyforge.org/ssh/v2/api/...
>
> What you are likely looking for is to use Net::SSH::Multi (maybe), build
> up an aggregated event loop, and then run it with the "loop" method.
>
> --
> Posted viahttp://www.ruby-....

Basically, I just want to manage 2 PCs.
"sending command to PC1
wait until command finished
sending command to PC2
wait until command finished
sending command to PC1
wait until command finished"

I thought open both sessions at the same time was a convenient way to
open them only once.

Sebastian W.

1/14/2009 11:30:00 PM

0

lyrics wrote:
> On 14 jan, 23:31, "Sebastian W." <switt...@yahoo.com> wrote:
>>
>> > � end
>> up an aggregated event loop, and then run it with the "loop" method.
>>
>> --
>> Posted viahttp://www.ruby-....
>
> Basically, I just want to manage 2 PCs.
> "sending command to PC1
> wait until command finished
> sending command to PC2
> wait until command finished
> sending command to PC1
> wait until command finished"
>
> I thought open both sessions at the same time was a convenient way to
> open them only once.

Hm...I'm not an expert, but it seems to me in this case that it'd be
easier actually just to code it that way.

If your commands are short, you could always inline them with a {} style
block instead of do/end, if you really want to cut down on your line
count. :)

I guess for establishing the sessions, maybe it's a little inefficient
since you're opening up four sessions instead of two, but sometimes you
just have to DTSTTCPW. :P
--
Posted via http://www.ruby-....

Rodrigo Bermejo

1/15/2009 12:52:00 AM

0

Sebastian W. wrote:
> lyrics wrote:
I would enclose all the commands in a specific script on the target
client.
And then just execute this top level script from your ssh session..your
native script will take care of the rest.

(obviously it does not work if your a building your program logic on the
fly ..but you can also create your script on your box, scp to the target
box and then execute it)

..just another view

-r.


--
Posted via http://www.ruby-....

lyrics

1/15/2009 9:42:00 AM

0

On 15 jan, 00:30, "Sebastian W." <switt...@yahoo.com> wrote:
> lyrics wrote:
> > On 14 jan, 23:31, "Sebastian W." <switt...@yahoo.com> wrote:
>
> >> > end
> >> up an aggregated event loop, and then run it with the "loop" method.
>
> >> --
> >> Posted viahttp://www.ruby-....
>
> > Basically, I just want to manage 2 PCs.
> > "sending command to PC1
> > wait until command finished
> > sending command to PC2
> > wait until command finished
> > sending command to PC1
> > wait until command finished"
>
> > I thought open both sessions at the same time was a convenient way to
> > open them only once.
>
> Hm...I'm not an expert, but it seems to me in this case that it'd be
> easier actually just to code it that way.
>
> If your commands are short, you could always inline them with a {} style
> block instead of do/end, if you really want to cut down on your line
> count. :)
>
> I guess for establishing the sessions, maybe it's a little inefficient
> since you're opening up four sessions instead of two, but sometimes you
> just have to DTSTTCPW. :P
> --
> Posted viahttp://www.ruby-....

I may try this, but I want to avoid since this code is executed more
than 200 times.

lyrics

1/15/2009 10:06:00 AM

0

On 15 jan, 10:41, lyrics <robin.cy...@gmail.com> wrote:
> On 15 jan, 00:30, "Sebastian W." <switt...@yahoo.com> wrote:
>
>
>
> > lyrics wrote:
> > > On 14 jan, 23:31, "Sebastian W." <switt...@yahoo.com> wrote:
>
> > >> > end
> > >> up an aggregated event loop, and then run it with the "loop" method.
>
> > >> --
> > >> Posted viahttp://www.ruby-....
>
> > > Basically, I just want to manage 2 PCs.
> > > "sending command to PC1
> > > wait until command finished
> > > sending command to PC2
> > > wait until command finished
> > > sending command to PC1
> > > wait until command finished"
>
> > > I thought open both sessions at the same time was a convenient way to
> > > open them only once.
>
> > Hm...I'm not an expert, but it seems to me in this case that it'd be
> > easier actually just to code it that way.
>
> > If your commands are short, you could always inline them with a {} style
> > block instead of do/end, if you really want to cut down on your line
> > count. :)
>
> > I guess for establishing the sessions, maybe it's a little inefficient
> > since you're opening up four sessions instead of two, but sometimes you
> > just have to DTSTTCPW. :P
> > --
> > Posted viahttp://www.ruby-....
>
> I may try this, but I want to avoid since this code is executed more
> than 200 times.

I did more test.
I found out that I was working on the wrong issue:
the "exec!" command do it job well.
I think my issue comes from restarting a service.
It likes it takes times before really "up" whereas the command returns.