我正在使用漂亮的http://www.jcraft.com/jsch/库 - 但是当我运行一些命令时,我看到jsch不时会返回一个-1的getExitStatus,即使脚本运行正常(当我运行它时)它始终是一个成功的0退出代码)。有什么想法吗?
(似乎发生在各种各样的命令中)
答案 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!");
}
};