如何在lua中尾随-F日志文件(截断识别)?

时间:2013-06-28 11:45:11

标签: lua tail inotify

我想在Lua中输出tailftail -F或类似的东西,而不会阻塞或锁定。如果文件被截断或日志旋转,程序将检测到它并返回到开始。这似乎是一级问题,但对我来说看起来很奇怪。我只是想不出来。有人可以分享一些代码吗?

1 个答案:

答案 0 :(得分:0)

我想到了两个想法,您可以将tail -F的输出直接输入到脚本执行中。从那里你可以从stdin读取它。也许是这样的:

local c = 0
for line in io.stdin:lines() do
  c = c + 1
  print(c, line)
end

问题是tail使用stderr报告文件截断,因此除非您找到某种方法将stderr重定向到stdin,否则脚本将无法看到该文件

另一个想法是使用io.popen并在主循环之前强制stderr - > stdin重定向。然后,您可以使用任何标准模式匹配器来检查尾部截断。

local tailin = io.popen('tail -F '..(...)..' 2>&1', 'r')

local c = 0
for line in tailin:lines() do
  c = c + 1
  print(c, line)
  c = line:match 'truncated' and 0 or c
end

请注意,这两种方法都阻止了btw。