2014-02-09 103 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