[英]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.