Net::SSH serialized commands

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!("")
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

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!("")
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; ")
end

On 14 jan, 22:12, “Sebastian W.” [email protected] wrote:

end
could try just doing this:

Net::SSH.start( addr, user, :password => passwd) do |session|
session.exec! (“service X restart; ”)
end

Posted viahttp://www.ruby-forum.com/.

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

lyrics wrote:

On 14 jan, 22:12, “Sebastian W.” [email protected] wrote:

end
could try just doing this:

Net::SSH.start( addr, user, :password => passwd) do |session|
�session.exec! (“service X restart; ”)
end

Posted viahttp://www.ruby-forum.com/.

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/index.html

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.

lyrics wrote:

On 14 jan, 23:31, “Sebastian W.” [email protected] wrote:

� end
up an aggregated event loop, and then run it with the “loop” method.


Posted viahttp://www.ruby-forum.com/.

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. :slight_smile:

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. :stuck_out_tongue:

On 14 jan, 23:31, “Sebastian W.” [email protected] wrote:

end
up an aggregated event loop, and then run it with the “loop” method.


Posted viahttp://www.ruby-forum.com/.

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.

On 15 jan, 00:30, “Sebastian W.” [email protected] wrote:

"sending command to PC1
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. :slight_smile:

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. :stuck_out_tongue:

Posted viahttp://www.ruby-forum.com/.

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

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.

On 15 jan, 10:41, lyrics [email protected] wrote:


I thought open both sessions at the same time was a convenient way to
since you’re opening up four sessions instead of two, but sometimes you
just have to DTSTTCPW. :stuck_out_tongue:

Posted viahttp://www.ruby-forum.com/.

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.