Выполнение команды Jsch приводит к зависанию логов докера - PullRequest
0 голосов
/ 04 апреля 2019

Я выполняю команду на удаленном компьютере, используя 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;
}

В контейнере Docker Tomcat этот метод вызывается из контроллера Spring MVC.Целое приложение работает хорошо, но когда вызывается этот метод, журналы Docker-контейнера зависают, и после этого ничего не отображается.Но приложение работает как обычно, зависают только журналы.

Этот метод работал нормально, когда мы запускаем наше приложение на сервере Tomcat напрямую, но не работает в док-контейнере.

Как решитьэтот вопрос?

1 Ответ

0 голосов
/ 08 апреля 2019

Я удалил следующие 2 строки в коде, чтобы решить проблему:

channel.setInputStream(null);
channel.setErrStream(System.err);
...