【问题标题】:SshExec RunCommand returns with exit code -1 after 12 seconds (timeout?)SshExec RunCommand 在 12 秒后返回退出代码 -1(超时?)
【发布时间】:2015-11-04 23:02:39
【问题描述】:

尝试使用 Tamir.SharpSsh.SshExec 执行运行时间较长(~30 秒)的 sh 脚本。 (脚本在目标机器上运行良好。)大约 12 秒后,RunCommand 调用返回代码 -1。它看起来像一个超时,但我不知道如何配置它。

这是我使用的代码:

var ssh = new SshExec("mylinux", "myuser", "mypassword");
ssh.Connect(22);
string stdOut = "", stdErr = "";
int processExitCode = ssh.RunCommand("./longrunning.sh", ref stdOut, ref stdErr);

【问题讨论】:

  • 为什么不把代码包装在try{}catch{} 周围,你考虑过吗..?
  • @MethodMan 谢谢。它不会抛出异常,而是返回 -1,并且 shell 脚本继续在远程机器上运行......所以它只是 SharpSsh API 的超时......
  • @MartinPrikryl 是的,这是一个很大的遗留项目,我只需要做这个增加超时的“小修复”......但也许最后我无法避免切换 ssh.net.. .
  • 您是否尝试调试过RunCommand? (SharpSSH 是开源的)
  • @MartinPrikryl 是的。最后我做到了,并意识到它只是越野车。我会总结一下并在此处添加答案...

标签: c# .net ssh timeout sharpssh


【解决方案1】:

经过一些调试,RunCommand 方法似乎有一个错误:如果 std 输入流变空(因为脚本长时间不输出任何内容)它会返回,即使脚本仍在运行。

作为一种解决方法,您可以在派生类上编写一个固定的 RunCommand 方法,并在读取流之前主动等待m_channel.isClosed() 变为真。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多