2014-02-09 4 views
1

Я хочу, чтобы grep журналы за последние X минут каждые X минут (например: grep logs последних 5 минут каждые 5 минут) без grep-ing ничего более старого. Какой может быть самый простой способ сделать это?grep журналы за последние X минут каждые X минут

+0

сообщение некоторые части вас войти таким образом мы видим, формат даты и также после того, что вы пытались – Jotne

+0

есть посмотрите на это:.. Http: // StackOverflow .com/вопросы/21524957/разбор содержимого в своем-файле-между-с ertain-временные метки –

ответ

0

рубин 1.9.3 решения

Вторая часть, которая вам нужна, я не проверял еще :(

Примечания: Кроме того, если вы знаете местоположение изменений «Ruby» The хижина (. Первая строка сценария), по соображениям безопасности

#! /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 
Смежные вопросы