Net-ssh超时执行?

Seb*_*ler 4 ruby ssh ruby-on-rails net-ssh

在我的应用程序中,我想exec!在指定的时间后终止SSH连接的命令.

我发现:timeoutNet::SSH.start命令,但文档以下这只是初始连接.是否有相同的exec命令?

我的第一个猜测是没有使用,exec!因为这将等到命令完成,但是使用exec并围绕调用,循环检查每次迭代的执行状态,并在给定的时间后失败.

如果我正确理解文档,那就是这样的:

server = NET::SSH.start(...)

server.exec("some command")

start_time = Time.now
terminate_calculation = false

trap("TIME") { terminate_calculation = ((Time.now - start_time) > 60) }
ssh.loop(0.1) { not terminate_calculation }
Run Code Online (Sandbox Code Playgroud)

然而这对我来说似乎很脏.我期待类似的东西server.exec("some command" { :timeout=>60}).也许有一些内置功能来实现这个功能?

Jiř*_*šil 7

我不确定这是否真的可以在SSH上下文中工作,但Ruby本身有一个超时方法:

server = NET::SSH.start ...
timeout 60 do
  server.exec! "some command"
end
Run Code Online (Sandbox Code Playgroud)

这会Timeout::Error在60秒后升高.查看文档.