Jsch命令执行挂起了docker日志

问题描述 投票:-1回答:1

我正在使用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容器中不起作用时,此方法运行正常。

如何解决这个问题?

docker jsch
1个回答
0
投票

我已删除代码中的以下2行以解决此问题:

channel.setInputStream(null);
channel.setErrStream(System.err);
© www.soinside.com 2019 - 2024. All rights reserved.