【发布时间】:2016-03-22 11:36:37
【问题描述】:
我正在使用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 &
我目前使用的方法是从远程服务器 scp stderr 文件并检查它是否为空。如果文件为空,那么我可以说它启动正确。这可行,但不是那么健壮:
session.command(javaCmd);
manager.copyArtefactFromTarget(remoteHost, remoteStdErrFile, localFileSystem);
如果启动java进程有任何延迟,stderr可以为空,然后在我从服务器收集后填充。
使用 unix 退出代码不是一种选择,因为该进程被置于后台。只有在进程退出时才能获得代码,但在这种情况下,进程甚至都没有启动。
只是想知道是否有任何方法可以监视该过程,以及它是否正确启动。
【问题讨论】:
-
如果您关心的是“它是否正确启动”,那么您什么时候不尝试向服务器发出请求?
-
我打算稍后在程序中向服务器发出请求,并在那里实现了重试机制。但这永远不会成功,因为 REST 服务器甚至都没有启动。它可能由于许多不同的原因而失败。错误的 java 版本,java 不在 classpath 上等。我想获得关于它是否启动的反馈的原因是我可以通知用户问题(例如 java 不在 classpath 上),然后退出应用程序。需要手动干预,因此由用户自行修复,然后重新运行程序。