我有这个代码来拖尾远程日志文件:
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
,但没有成功。
答案 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