如何使用JAVA检查在linux机器上运行的服务的状态

时间:2016-06-06 05:48:22

标签: java linux unix

我想开发一个Web应用程序(Java)来检查所有应用程序的服务状态。

对于在linux机器上运行的服务(如tomcat服务),有人可以帮我编写一个java代码吗

我有4台Linux服务器,它们在所有服务器上运行服务。所以,我想从java本身连接它们并获得进程状态。

1 个答案:

答案 0 :(得分:0)

public static void main(String args[]) throws JSchException, InterruptedException, IOException {
        JSch objJSch = new JSch();
        Session objSession = objJSch.getSession("userName", "ip_address");
        objSession.setPassword("password");
        objSession.setConfig("StrictHostKeyChecking", "no");
        System.out.println("Establishing Connection...");
        objSession.connect();
        System.out.println("Connection established.");
        Channel objChannel = objSession.openChannel("exec");
        ((ChannelExec) objChannel).setCommand("ps aux");
        InputStream in = objChannel.getInputStream();
        objChannel.connect();
        String s;
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        while ((s = br.readLine()) != null)
            System.out.println(s);
        System.out.println("disconnecting...");
        objChannel.disconnect();
        objSession.disconnect();
        System.out.println("disconnected.");
}

JSch库启用ssh连接。您可以通过以下link中的其他示例添加以下依赖项,然后将jar放入您的路径中:

<dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.53</version>
</dependency>

您可以在循环内重复“n”个服务器的过程。上面的代码将打印以下输出:(取决于操作系统。我正在使用ubuntu,原谅我因为奇怪的表设计,无法正确格式化)。

|| || USER PID ||%CPU ||%MEM || || VSZ RSS || || TTY STAT || || START TIME || || COMMAND

|| ||根2202 || || 0.0 0.0 || || 144768 6860 || || ||小号04:57 || 0:00 || || TINT2

.... //下一行

.... //下一行

STAT列表示应用程序的状态。以下是申请的合理状态:

D不间断睡眠(通常是IO)

R正在运行或可运行(在运行队列中)

S可中断的睡眠(等待事件完成)

T停止,无论是通过作业控制信号还是因为它被跟踪

W分页(自2.6.xx内核以来无效)

X死(永远不应该被看见)

Z defunct(“zombie”)进程终止但未被其父级

收获

(以上来自link的信息)