を使用して、Java プログラムから ssh 経由でリモート マシン上で dstat を実行しようとしています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 です)