代码之家  ›  专栏  ›  技术社区  ›  Michael Neale

JSCH错误返回代码不一致

  •  6
  • Michael Neale  · 技术社区  · 14 年前

    我用的是尼斯 http://www.jcraft.com/jsch/ 但是,当我运行一些命令时,我看到jsch会不时返回-1的getexitstatus,即使脚本运行良好(当我手动运行它时,它始终是成功的0退出代码)。有什么想法吗?

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

    2 回复  |  直到 11 年前
        1
  •  5
  •   Michael Neale    14 年前

    我放弃了JSCH,它的API毫无用处,转而使用:

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

    (Ganymede ssh2)。 我在JVM中使用ssh做了很多工作,并且在几个月的24小时使用中,Ganymede被证明是更可靠的。更令人愉快。我剩下的主要抱怨是显然无法设置SCP的超时。

        2
  •  4
  •   Stu R    13 年前

    我也遇到了同样的问题,然后在jsch changelog(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!");
        }
    
    };