2017-03-31 95 views
0

我製作了一個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

回答

0

這個問題似乎源於系統輸出,我解決了以下問題。

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