Ruby - 从文件末尾连续读取

问题描述:

我制作了一个Ruby程序,该程序应该读取日志文件的末尾以及在执行过程中添加到文件末尾的任何其他信息剧本。然后使用正则表达式来匹配特定的行,例如可以在下面看到。Ruby - 从文件末尾连续读取

年03月31 13点28分05秒的dnsmasq dns.ns1.local [82093]:查询[A] ns1.localdomain 从192.168.10.2

程序应该然后邮寄整个线一个本地用户(可以手动完成),无限期地这样做,同时将相同的过程应用于添加到日志文件中的任何附加信息。这个想法是,该程序不应该退出。

我可以运行我的程序没有任何错误,使用ruby​​ name_of_program.rb/var/log/messages,提供作为参数的日志文件的tsystemhe路径。问题在于程序没有完成任何可以手动执行的任务。

我的Ruby程序:

open(ARGV.first) do |file| 
    file.seek(0, IO::SEEK_END) 
    loop do 
     changes = file.read 
     unless changes.empty? 
      if changes =~ /query.*ns1.localdomain/ 
       cmd "echo Q%DNS_QUERY_TO_WWW -> #{file}Q% | /usr/sbin/sendmail berit" 
      end 
     end 
    end 
end 

任何输入,以什么我缺少的,将不胜感激。

+0

请参阅https://github.com/ruby/chkbuild/blob/master/tail-f – Tachyons

这个问题似乎源于系统输出,我解决了以下问题。

open(ARGV.first) do |file| 
    file.seek(0, IO::SEEK_END) 
    loop do 
     changes = file.read 
     unless changes.empty? 
      if changes =~ /query.*ns1.localdomain/ 
       system "echo '#{changes}' | /usr/sbin/sendmail berit\n" 
      end 
     end 
    end 
end