Java 根据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

我有一个运行Java应用程序(Jar)的linux服务器,我用命令
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服务器上运行。