用grep远程日志文件尾

时间:2013-01-18 18:03:03

标签: ruby logging grep tail

我有这个代码来拖尾远程日志文件:

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

我想只检索file.log中包含 ERROR 字符串的行,我正在尝试调用tail -f #{file} | grep ERROR,但没有成功。

1 个答案:

答案 0 :(得分:0)

我不确定您是否想在tail -f #{file} | grep ERROR内运行.loop-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