0

我正在尝试通过 ssh 从我的 Java 程序使用sshj library.

import net.schmizz.sshj.connection.channel.direct.Session;
import net.schmizz.sshj.connection.channel.direct.Session.Command;

我需要做的是在远程机器(Linux)上启动 dstat,继续我的程序在远程机器(数据库服务器)上创建一些负载,然后停止dstat日志记录。

到目前为止我所做的:连接到服务器,将 dstat 文件夹复制到/tmp/dstat,使文件可运行,然后:

session = ssh.startSession();

Command cmd=    session.exec("/tmp/BenchIT/rs-sysmon/dstat --noupdate -T -c -m -n -d -r --aio -s -g --vm --fs  -i -y -p --disk-util --output /tmp/BenchIT/rs-sysmon/dstat_resultfile.csv 1");

System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());

cmd.join(5, TimeUnit.SECONDS);

System.out.println("\n** exit status: " + cmd.getExitStatus());

session.close();

所以现在的问题是,dstat进程在远程机器上启动并记录到一个.csv文件中,就像我想要的那样,但是 Java 程序等待进程完成。所以后面的线session.exec()永远不会到达。

我还尝试在仅包含dstat命令的远程服务器上运行本地脚本,但我的程序仍在等待dstat完成,这永远不会发生......

dstat所以现在我的问题是:在远程机器上运行时如何继续我的程序?dstat当实现这一点时,我的程序完成它应该做的事情后如何停止?我需要运行单独的线程还是什么?我真的不知道它是如何工作的......

(运行代码的机器也是Linux)

4

0 回答 0