Java:通过ssh在远程计算机上启动进程,继续执行程序并在之后停止进程(iostat)

时间:2014-07-14 09:06:35

标签: java linux bash ssh sshj

我尝试使用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)

0 个答案:

没有答案