繁体   English   中英

如何监视远程Java进程

[英]How to monitor remote java process

我正在使用ssh在远程计算机上启动Java程序以登录到计算机,然后运行命令。 ssh会话是使用JCraft Java库创建的。 该过程正在启动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  &

我目前使用的方法是从远程服务器中获取stderr文件,并检查其是否为空。 如果文件为空,则可以说它已正确启动。 这可以工作,但不够强大:

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

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

不能使用unix退出代码,因为该过程已在后台进行。 您只有在流程退出时才获得代码,但是在这种情况下,流程甚至没有启动。

只是想知道是否仍然有必要监视该过程,以及它是否正确启动。

您可以通过以下方式获取后台任务的进程ID

echo $!

(请参阅如何获取后台进程的PID?

然后,您可以使用该pid轮询该进程是否仍然存在(请参见例如https://stackoverflow.com/a/14880926/1015327 )。 如果该过程终止,您可以做出相应的反应。 并且您可以在REST服务启用后停止轮询。 如果该进程在一定时间内未能激活REST服务,您也可以终止该进程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM