如何监控远程java进程

时间:2016-03-22 11:36:38

标签: java linux

我正在使用ssh在远程计算机上启动java程序,以登录计算机然后运行该命令。使用JCraft java库创建ssh会话。该过程正在启动REST服务器,并使用“&”进入后台。该计划如下:

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 stderr文件并检查它是否为空。如果文件为空,那么我可以说它正确启动。这有效,但它并不强大:

  session.command(javaCmd);
  manager.copyArtefactFromTarget(remoteHost, remoteStdErrFile, localFileSystem);

如果启动java进程有任何延迟,stderr可以为空,然后在我从服务器收集后填充。

使用unix退出代码不是一个选项,因为该过程已放入后台。您只在流程退出时获取代码,但在这种情况下,流程甚至都没有启动。

只是想知道是否有监控过程,以及它是否正确启动。

1 个答案:

答案 0 :(得分:1)

您可以通过

获取后台任务的进程ID

echo $!

(见How to get PID of background process?

然后,您可以使用该pid轮询该进程是否仍处于活动状态(请参阅例如https://stackoverflow.com/a/14880926/1015327)。如果过程死亡,你可以做出相应的反应;一旦REST服务正常运行,您就可以停止轮询。如果在某个时间段内无法激活REST服务,您也可以终止该进程。

但是,对我而言,您的协议似乎有点复杂且容易出错。您是否考虑过运行(Java-)服务器的其他方法?