Jsch错误返回代码不一致

时间:2010-07-01 03:38:41

标签: java ssh

我正在使用漂亮的http://www.jcraft.com/jsch/库 - 但是当我运行一些命令时,我看到jsch不时会返回一个-1的getExitStatus,即使脚本运行正常(当我运行它时)它始终是一个成功的0退出代码)。有什么想法吗?

(似乎发生在各种各样的命令中)

2 个答案:

答案 0 :(得分:5)

我放弃了Jsch - 以及它令人难以置信的无用API并切换到:

http://www.cleondris.ch/opensource/ssh2/

(Ganymede SSH2)。 我在JVM中使用ssh做了很多工作,经过几个月的24小时使用,ganymede已经证明更加可靠。而且更愉快。我主要的抱怨是显然无法为SCP设置超时。

答案 1 :(得分:4)

我遇到了同样的问题,然后在Jsch更新日志中遇到了这个问题(http://www.jcraft.com/jsch/ChangeLog):

  
      
  • 功能:添加了'Channel.isClosed()'。 Channel.getExitStatus()应该是    在Channel.isClosed()== true。
  • 之后调用   

所以敲了这个:在 channel.disconnect()之前需要被称为,否则仍然会得到-1问题:

private static void waitForChannelClosure(ChannelExec ce, long maxwaitMs) {

    log.info("waitForChannelClosure >>>");
    final long until = System.currentTimeMillis() + maxwaitMs;

    try {
        while (!ce.isClosed() && System.currentTimeMillis() < until) { 
            log.info("SFTP channel not closed .. waiting");
            Thread.sleep(250);
        }

    } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted", e);
    }

    if (!ce.isClosed()) {
        throw new RuntimeException("Channel not closed in timely manner!");
    }

};