ssh
を使用してリモートマシン上でJavaプログラムを起動し、マシンにログインしてからコマンドを実行します。 sshセッションは、JCraft
Javaライブラリを使用して作成されます。プロセスはRESTサーバーを開始し、 '&'とバックグラウンドに入れられます。私は、現時点で使用していますリモートJavaプロセスを監視する方法
java -cp $ATFIMAGE/atf.jar com.atf.agent.jobs.SlaveRunner dub-001948-VM01 8888 8889 > /home/john/testHome/SlaveRunner_stdout.log 2> /home/john/testHome/SlaveRunner_stderr.log &
アプローチリモートサーバーからの標準エラー出力ファイルをscpが、それが空だかどうかを確認することです。次のようにプログラムが開始されます。ファイルが空の場合は、正しく起動したと言えます。これは動作しますが、それはその堅牢ではありません:Javaプロセスの開始の遅れがある場合は、標準エラー出力を空にすることができ
session.command(javaCmd);
manager.copyArtefactFromTarget(remoteHost, remoteStdErrFile, localFileSystem);
、その後、私は、サーバーからそれを収集した後、埋め。
プロセスがバックグラウンドに置かれるため、UNIX出口コードを使用することはオプションではありません。プロセスが終了するとコードを取得するだけですが、この場合はプロセスが開始されませんでした。
プロセスを監視する方法があるかどうか、およびプロセスが正しく開始されているかどうかは疑問です。
関連:http://stackoverflow.com/questions/1908610/how-to-get-pid-of-background-process – JimmyB
あなたが心配しているのは、「正しく開始しましたか?あなたはサーバーに要求をしようとしますか? – JJF
プログラムの後半でサーバーに要求を行い、そこに再試行メカニズムを実装しました。 RESTサーバーは起動していないので、これは決して成功しません。それはいろいろな理由で失敗する可能性があります。間違ったjavaバージョン、クラスパス上のjavaなど。私はそれが開始されたかどうかのフィードバックを得たいので、問題のユーザに通知することができます(例えばクラスパス上のjavaではありません)。手作業による介入が必要なので、ユーザーが修正してプログラムを再実行するまでは、ユーザー自身の責任で行ってください。 – eeijlar