我正在使用JSch在远程计算机上执行命令,如下所示:
public String executeCommandNWaitForCompletion(String hostIp, String userName, String password, String command) throws Exception {
Session session = null;
ChannelExec channel = null;
InputStream in = null;
String response = "";
try {
session = getSession(hostIp, userName, password);
channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(null);
channel.setErrStream(System.err);
in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) break;
response += new String(tmp, 0, i);
}
if (channel.isClosed()) {
if (in.available() > 0) continue;
log.debug("Exit-status: " + channel.getExitStatus());
break;
}
}
} finally {
if (in != null) in.close();
closeResources(session, channel);
}
return response;
}
在tomcat docker容器中,此方法是从spring mvc控制器调用的。整个应用程序运行良好,但是调用此方法时,docker容器日志将被挂起,此后未显示任何内容。但是应用程序照常运行,只有日志被挂起。
当我们直接在Tomcat服务器上运行应用程序但在Docker容器中不起作用时,此方法运行良好。
如何解决此问题?
答案 0 :(得分:0)
我已删除代码中的以下两行来解决此问题:
channel.setInputStream(null);
channel.setErrStream(System.err);