我想开发一个Web应用程序(Java)来检查所有应用程序的服务状态。
对于在linux机器上运行的服务(如tomcat服务),有人可以帮我编写一个java代码吗
我有4台Linux服务器,它们在所有服务器上运行服务。所以,我想从java本身连接它们并获得进程状态。
答案 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的信息)