由于某些操作系统限制,我无法在我的prod节点上安装ruby和mysql。我必须处理写在该节点上的日志文件。因此,我计划将日志文件的内容写入另一个文件,因为它写入日志并处理该新文件。
def watch_for(file)
f = File.open(file,"r")
f.seek(0,IO::SEEK_END)
while true do
select([f])
line = f.gets
open('myfile.out', 'a+') { |s|
s.puts "#{line}"
}
end
end
但这似乎失败了;对此有任何帮助非常感谢。
答案 0 :(得分:0)
每次循环重新打开输出文件都不是一个好主意。如果您只是计划附加而不是读取文件,请使用'a'
而不是“a+'
作为IO模式。此外,没有充分的理由使用像"#{line}"
这样的字符串插值。我重写了只打开一次文件的方法:
def watch_for(file)
f = File.open(file,"r")
f.seek(0,IO::SEEK_END)
s = File.open('myfile.out', 'a')
while true do
s.write(f.readline)
end
end
如果这根本不是一种方法,可能会更好,因为除了杀死进程之外没有办法退出。当然,您可以使用this comment中提到的tail -f $file >> myfile.out
。