我正在开发一个 JSP Web 应用程序,它将用于监视我办公室中不同 HP-ux 和 Linux 服务器的系统参数。我正在使用 jsch 在远程系统上执行命令。我的问题是 jsch 对于ntpq -p
.
我正在尝试使用命令获取与系统同步的服务器ntpq -p | tail -1 | awk '{ print $1 }'
。但它返回null。但是像这样
mpstat | tail -1 | awk '{ print $12 }'
的命令工作正常并返回结果。谁能告诉我我做错了什么以及任何可能的解决方法......?
这是我为此目的使用的代码!
package com.bpcl.sysmon;
import java.io.IOException;
import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
public class Sys
{
String line;
String host="**.**.**.***";
String user="******";
String password="***********";
String result = null;
public String getdata(String command1) throws IOException
{
try
{
result = null;
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
com.jcraft.jsch.Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
Channel channel=session.openChannel("exec");
((ChannelExec) channel).setCommand(command1);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
while(true)
{
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
result = (new String(tmp, 0, i));
}
if(channel.isClosed())
{
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try
{
Thread.sleep(1000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
public String getcpu(boolean linux)
{
String res1 = null;
try {
if(linux)
res1 = getdata("mpstat | tail -1 | awk '{ print $12 }'");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res1;
}
public String getntp(boolean linux)
{
String res1 = null;
try {
if(linux)
res1 = getdata("ntpq -p | tail -1 | awk '{ print $1}'");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res1;
}