【问题标题】:Jsch error return codes not consistentJsch错误返回码不一致
【发布时间】:2013-06-27 09:01:57
【问题描述】:

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

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

【问题讨论】:

    标签: java ssh


    【解决方案1】:

    我放弃了 Jsch - 以及它非常无用的 API,并转而使用:

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

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

    【讨论】:

    • 我也被 JSch 烧毁了,它的 api 和他们的文档很糟糕:“......而且只有在频道关闭之后(更准确地说,就在频道关闭之前)。”
    【解决方案2】:

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

    【讨论】:

    • 很高兴知道!但可能不会切换回来。现在还有其他一些选择(为他们结帐 jclouds)
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2011-10-01
    • 2022-01-23
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多