我尝试从Java连接到服务器并运行多个命令。命令似乎工作正常,但我没有得到我想要的Java结果。
这是我的代码段
final Command cmd = session.exec("cd /app/t/backo/bin && ls -all && pwd && . setDBLApp && sudo -E -u deploy ./runDBLApp && sudo -E -u deploy ./nightlyDBL -type host ");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(30, TimeUnit.SECONDS);
System.out.println("\n** exit status: " + cmd.getExitStatus());
这是我看到的输出。我认为它与LocalWindow大小有关,但我无法弄清楚如何修复它。这只发生(或似乎)当我使用具有大量屏幕输出的ssh命令时
这是一个小片段,我得到了100条左右的
14:56:48.957 [reader] INFO n.s.s.c.c.direct.SessionChannel - Received window adjustment for 2097152 bytes
14:56:48.957 [reader] DEBUG n.s.s.c.channel.Window$Remote - Increasing by 2097152 up to 2097152
14:56:48.957 [reader] DEBUG net.schmizz.concurrent.Promise - Setting <<chan#0 / chanreq for exec>> to `SOME`
14:56:48.963 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 4096 down to 2093056
14:56:48.964 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 1002 down to 2092054
14:56:48.964 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 23 down to 2092031
14:56:49.090 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 141 down to 2091890
14:56:49.120 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 267 down to 2091623
14:56:49.230 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 309 down to 2091314
14:56:49.531 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 308 down to 2091006
14:56:49.532 [reader] DEBUG n.s.s.c.channel.Window$Local - Consuming by 306 down to 2090700
我想看到的是ssh命令的屏幕输出,可能是详细的
答案 0 :(得分:0)
你认为这可能与窗口大小有关。保持来自服务器的输出的本地窗口sshj可能已经填满。通过读取API提供的stdout / stderr流(即channel.getInputStream()
/ channel.getErrorStream()
您有两种选择:
执行命令时,继续耗尽stdout和stderr流。基于你的片段,你实际上是从stdout读取而不是stderr。您可以使用available()
上的java.io.InputStream
方法对2个流中的读取进行多路复用。
设置sessionChannel.setAutoExpand(true)
但请注意,这意味着,无论产生多少输出,即使您没有通过读取stdout / stderr流来消耗stdout / stderr流,本地窗口也将继续扩展。因此,这有可能导致高内存消耗。