2014-02-09 104 views
1

我希望每隔X分鐘記錄最後X分鐘的日誌(例如,每5分鐘記錄最後5分鐘的grep日誌),而不要更老。最簡單的方法是什麼?grep記錄每X分鐘的最後X分鐘

+0

後,所以我們看到的日期格式,還張貼你已經嘗試什麼 – Jotne

+0

有看看這個:。HTTP://計算器的.com /問題/ 21524957 /解析-內容對的一文件-C間ERTAIN,時間戳 –

回答

0

一個Ruby 1.9.3解決方案

您需要的第二部分,我沒有測試它尚未:(

注:另外,如果你知道的「紅寶石」變化家當位置( 。你一些地方登錄腳本的第一行), 出於安全原因

#! /usr/bin/env ruby 

require 'date' 
require 'pathname' 

if ARGV.length != 4 
     $stderr.print "usage: #{$0} -d|-h|-m|-s time expression log_file\n" 
     exit 1 
end 
begin 
     total_amount = Integer ARGV[1] 
rescue ArgumentError 
     $stderr.print "error: parameter 'time' must be an Integer\n" 
     $stderr.print "usage: #{$0} -d|-h|-m|-s time expression log_file\n" 
end 

if ARGV[0] == "-m" 
     gap = Rational(60, 86400) 
     time_str = "%b %d %H:%M" 
     until_next_search = total_amount * 60 
elsif ARGV[0] == "-s" 
     gap = Rational(1, 86400) 
     time_str = "%b %d %H:%M:%S" 
     until_next_search = total_amount 
elsif ARGV[0] == "-h" 
     gap = Rational(3600, 86400) 
     time_str = "%b %d %H" 
     until_next_search = total_amount * 3600 
elsif ARGV[0] == "-d" 
     time_str = "%b %d" 
     gap = 1 
     until_next_search = total_amount * 86400 
else 
     $stderr.print "usage: #{$0} -d|-h|-m|-s time expression log_file\n" 
     exit 1 
end 

pn = Pathname.new(ARGV[3]) 
if pn.exist? 
     log = (pn.directory?) ? ARGV[3] + "/*" : ARGV[3] 
else 
     $stderr.print "error: file '" << ARGV[3] << "' does not exist\n" 
     $stderr.print "usage: #{$0} -d|-h|-m|-s time expression log_file\n" 
end 

search_str = ARGV[2] 
now = DateTime.now 

while true 
     total_amount.times do 
       now -= gap 
       system "cat " << log << " | grep '" << now.strftime(time_str) << ".*" << search_str << "'" 
     end 
     sleep until_next_search 
end