我尝试使用sshj library
从我的Java程序通过ssh在远程计算机上运行dstat。
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)