5

私のアプリケーションexec!では、指定された時間が経過した後、SSH接続のコマンドを終了したいと思います。

コマンドの:timeoutforを見つけましたが、ドキュメントに従って、これは最初の接続専用です。コマンドNet::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 }

しかし、これは私には汚いようです。私はのようなものを期待していserver.exec("some command" { :timeout=>60})ます。たぶん、この機能を実現するための組み込み関数がいくつかありますか?

4

4 に答える 4

7

これがSSHコンテキストで実際に機能するかどうかはわかりませんが、Ruby自体にタイムアウトメソッドがあります。

server = NET::SSH.start ...
timeout 60 do
  server.exec! "some command"
end

これはTimeout::Error60秒後に発生します。ドキュメントをチェックしてください。

于 2013-02-06T13:04:25.900 に答える
1

net/sshでそれを行うネイティブな方法はないと思います。コードを参照してください。そのオプションに追加のパラメータはありません。

1つの方法は、呼び出すコマンドでタイムアウトを処理することです。UnixおよびLinuxSEでこの回答を参照してください。

接続するシステムに外部依存関係を導入しないので、あなたのやり方の方が良いと思います。

于 2013-02-06T13:16:26.533 に答える
0

別の解決策は、OpenSSH構成ファイル(〜/ .ssh / config、/ etc / ssh_config、...)でConnectTimeoutオプションを設定することです。

詳細については、

https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/config.rb

于 2013-06-24T12:30:01.207 に答える
0

私がしたことは、イベント処理を行うスレッドを持っていることです。次に、チャネルが閉じるまで定義された秒数ループします。これらの秒が経過してもチャネルが開いている場合は、チャネルを閉じて実行を続行します。

于 2015-10-26T20:31:36.793 に答える