Java 根据Linux服务器中的应用程序状态显示状态消息
我有一个运行Java应用程序(Jar)的linux服务器,我用命令Java 根据Linux服务器中的应用程序状态显示状态消息,java,linux,Java,Linux,我有一个运行Java应用程序(Jar)的linux服务器,我用命令ps-ef | grep'myapp.Jar'检查它,并得到两行输出,说明我的应用程序已启动并正在运行 现在我们有了一个Web UI应用程序。我想在UI中显示一条状态消息,如“我的应用程序已启动/关闭”,具体取决于我的jar是否在linux服务器上运行或停止 如何实现这一点?您可以使用jcmd。 假设myapp.jar引导类是com.myapp.Main,那么这段代码可能会帮助您: Runtime rt = Runtime
ps-ef | grep'myapp.Jar'
检查它,并得到两行输出,说明我的应用程序已启动并正在运行
现在我们有了一个Web UI应用程序。我想在UI中显示一条状态消息,如“我的应用程序已启动/关闭”,具体取决于我的jar是否在linux服务器上运行或停止
如何实现这一点?您可以使用
jcmd
。
假设myapp.jar引导类是com.myapp.Main
,那么这段代码可能会帮助您:
Runtime rt = Runtime.getRuntime();
String[] commands = {"jcmd"};
Process proc = rt.exec(commands);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
// read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null) {
String[] out = s.split("\\s");
if("com.myapp.Main".equals(out[1])) {
System.out.println("is running");
}
}
您可以使用
jcmd
。
假设myapp.jar引导类是com.myapp.Main
,那么这段代码可能会帮助您:
Runtime rt = Runtime.getRuntime();
String[] commands = {"jcmd"};
Process proc = rt.exec(commands);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
// read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null) {
String[] out = s.split("\\s");
if("com.myapp.Main".equals(out[1])) {
System.out.println("is running");
}
}
因为您没有提到您正在运行的应用程序服务器,所以我将继续假设ApacheTomcat。如果不是这样,这个答案将毫无用处 如果您已经启用或愿意启用它,您可以从中受益 Tomcat服务器仅运行一个应用程序“myWebApp”以及几个默认应用程序的示例:
OK - Listed applications for virtual host localhost
/:running:0:ROOT
/myWebApp:running:0:myWebApp
/examples:running:0:examples
/host-manager:running:0:host-manager
/jsp:running:0:jsp
/manager:running:1:manager
/docs:running:0:docs
为了使用Tomcat Manager,您还需要在Tomcat中启用至少一个具有适当角色的用户。在Tomcat 7中,所需的角色是manager script
,因此您必须在$CATALINA_HOME/conf/Tomcat users.xml
中添加以下行,以便添加名为“status”的用户和密码“password”(请将其更改为更合理的密码):
如果您从上面的示例中生成字节码,那么您应该能够在本地针对Tomcat7运行它(至少,也可以使用其他版本)
如果您的Web UI碰巧是用Java制作的,您可以将该示例插入其中。对于javascript,查询
/manager/text/list
并解析其输出就可以了。既然您没有提到正在运行哪个应用程序服务器,我就假设ApacheTomcat。如果不是这样,这个答案将毫无用处
如果您已经启用或愿意启用它,您可以从中受益
Tomcat服务器仅运行一个应用程序“myWebApp”以及几个默认应用程序的示例:
OK - Listed applications for virtual host localhost
/:running:0:ROOT
/myWebApp:running:0:myWebApp
/examples:running:0:examples
/host-manager:running:0:host-manager
/jsp:running:0:jsp
/manager:running:1:manager
/docs:running:0:docs
为了使用Tomcat Manager,您还需要在Tomcat中启用至少一个具有适当角色的用户。在Tomcat 7中,所需的角色是manager script
,因此您必须在$CATALINA_HOME/conf/Tomcat users.xml
中添加以下行,以便添加名为“status”的用户和密码“password”(请将其更改为更合理的密码):
如果您从上面的示例中生成字节码,那么您应该能够在本地针对Tomcat7运行它(至少,也可以使用其他版本)
如果您的Web UI碰巧是用Java制作的,您可以将该示例插入其中。对于javascript,查询
/manager/text/list
并解析其输出就可以了。您可能会发现JMX很有趣。ui和应用程序在同一台服务器上运行吗?@Taher-是的。它们都在同一台Tomcat服务器上运行。你可能会发现JMX很有趣。ui和应用程序是否在同一台服务器上运行?@Taher-是。两者都在同一台Tomcat服务器上运行。