2013-02-28 67 views
2

我有一個運行星號的Linux服務器,我想知道它是重新啓動還是服務器發生了什麼,所以我編寫了一個Java應用程序來讀取控制檯。像這裏(http://www.coderanch.com/t/556707/java/java/connect-Linux-Java-code);這是一個非常好的例子。使用java遠程登錄到Linux系統並運行「grep」

但這裏有一個問題:

 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,它給了我一個空白行,該代碼讀取由排安慰行。所以如果我在這個空行之後得到任何數據,沒有任何東西給我。計劃堅持在那裏。所以我需要在空白行之後閱讀第二行。 console example 或任何想法讀取此'Disconnect'字符串?

我的主要目的 - 「星號重啓了嗎?」 - 因爲當星號重新啓動時,給出這樣的字符串,我們不知道爲什麼星號重新啓動!

+0

嘗試[JSch](http://www.jcraft.com/jsch/)。 – 2013-02-28 16:23:45

+0

已經在使用JSch:D – Acablack 2013-02-28 16:27:37

+0

嗯,從示例Shell和Sudo沒有提供類似的功能? – 2013-02-28 16:47:38

回答

0

你可以使用:asterisk -rvvvv | grep -v ^$ | grep 'Disconnect' grep命令將

+0

哇,這是很好的一個謝謝,週末後我會嘗試。謝謝。 – Acablack 2013-03-01 18:18:34

+0

不行,謝謝花時間給我。 – Acablack 2013-03-07 09:05:16

0

我使用jsch刪除空行。你需要等待足夠的時間來獲得緩衝區,所以需要使用try {Thread.sleep(1000);} catch(Exception ee){}。至少我是這樣使用的。

while(true){ 
     while(in.available()>0){ 
      int i=in.read(tmp, 0, 1024); 
      if(i<0)break; 
      System.out.print(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(); 
    } 
    catch(Exception e){ 
     System.out.println(e); 
    } 
    } 
+0

感謝您的回覆,但這是我想要的。問題是空白行,所以它給我in.read(tmp,0,1024)= 0,所以永遠不會讀取下面的行/行。 – Acablack 2013-03-01 06:49:23