这就是我想要做的事情,我使用JSch:
我不知道的是:
如果它确实在单独的线程中运行它,那么我无法在put
方法之后添加我的代码,但需要使用SftpProgressMonitor
代替(可能是?!)。
不幸的是,我在他们的文档中找不到关于如何运行put
或任何其他方法的调用 - 同步或异步。
答案 0 :(得分:2)
我所做的是监视循环中执行的命令的退出状态,只要状态为-1(意味着它仍然在运行)然后我睡觉当前线程,为了安全起见,这是一个好主意打破当举行达到时间限制,但这取决于你。
final JSch jsch = new JSch();
final Session sessionJSH = jsch.getSession(user, host, 22);
sessionJSH.setPassword(pwd);
final Hashtable configJSH = new Hashtable();
configJSH.put("StrictHostKeyChecking", "no");
sessionJSH.setConfig(configJSH);
sessionJSH.connect();
final Channel channel = sessionJSH.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channel.connect(0);
// we'll hold it until 30 minutes = 30m*60s*1000ms/300ms = 6000 times
int i = 0;
while (channel.getExitStatus() == -1 && i < 6000) {
log.debug("Exit status" + channel.getExitStatus());
Thread.sleep(300);
i++;
}
log.info("Exit status" + channel.getExitStatus());
channel.disconnect();
sessionJSH.disconnect();