使用Java远程登录Linux系统并运行 “grep”

2020年7月2日 16点热度 0条评论

我有一台运行星号的Linux服务器,我想知道它已重新启动或服务器中正在发生什么,所以我编写了一个Java应用程序来读取控制台。像这里(http://www.coderanch.com/t/556707/java/java/connect-Linux-Java-code);这是一个很好的例子。

但是这里有一个问题:

      String user=host.substring(0, host.indexOf('@'));      
  host=host.substring(host.indexOf('@')+1);

  Session session=jsch.getSession(user, host, 22);
   UserInfo ui=new MyUserInfo();
   session.setUserInfo(ui);  
   session.connect();

   String command=  "asterisk -rvvv | grep 'Disconnect' ";

   Channel channel=session.openChannel("exec"); 
   ((ChannelExec)channel).setCommand(command);

   channel.setInputStream(null);

   ((ChannelExec)channel).setErrStream(System.err);

   InputStream in=channel.getInputStream(); 

   channel.connect();
 while(in.available()==0){  
      int i=in.read(tmp, 0, 1024);  
      if(i<0)
      {break;}
      System.out.print("-"+new String(tmp, 0, i));  

    } 

当我执行
asterisk -rvvvvv | grep 'Disconnect时,它给了我空白行,并且此代码逐行读取到控制台。因此,如果在此空白行之后得到任何数据,则没有任何结果。程序贴在那里。所以我需要在空白行之后阅读第二行。

或有任何想法来读取此“断开连接”字符串?

我的主要目的-“星号是否重新启动?” -因为当星号重启时,给出了这样的字符串,我们不知道为什么星号重启!

解决方案如下:

您可以使用:asterisk -rvvvv | grep -v ^$ | grep 'Disconnect'grep命令将删除空白行