2013-01-18 62 views
6

我有這樣的代碼到尾部遠程日誌文件:尾部使用grep遠程日誌文件

def do_tail(session, file) 
     session.open_channel do |channel| 
     channel.on_data do |ch, data| 
     puts "[#{file}] -> #{data}" 
     end 
     channel.exec "tail -f #{file}" 
    end 

    Net::SSH.start("host", "user", :password => "passwd") do |session| 
     do_tail session, "/path_to_log/file.log" 
     session.loop 

我想與「ERROR」只檢索線串file.log,我想稱之爲「尾巴-f#{file} | grep ERROR「但沒有成功。

在此先感謝。

+2

'tail -f#{file} |的輸出是什麼? grep ERROR'? – Hugo

+3

您可以嘗試將'--line-buffered'添加到您的grep命令中。 – Cyrus

+0

也許你應該嘗試類似「bash -c'tail -f#{file} | grep ERROR'」 – user3132194

回答

0

我不確定你想在.loop內部運行tail -f #{file} | grep ERROR-f標誌告訴tail保持流式傳輸數據,並且您絕對不會使用Ctrl + C退出該流。

你可能只想使用一個簡單的Bash命令來做到這一點,爲此你甚至不需要.exec方法。嘗試如下:

def do_tail session, file 
    @keyword = 'ERROR' 
    session.open_channel do |channel| 
    channel.on_data {|ch, data| puts "[#{file}] -> #{data}"} 
    `grep #{keyword} #{file}` 
    end 
end