我正在尝试通过 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)