6

我有这个代码来跟踪远程日志文件:

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,我正在尝试调用tail -f #{file} | grep ERROR但没有成功。

4

1 回答 1

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
于 2015-08-30T21:11:59.577 回答