ruby sendmail после паттерна, найденного в IO - PullRequest
0 голосов
/ 13 января 2011

Я уверен, что что-то упустил. По сути, я хочу отслеживать ввод-вывод журналов, и если в журнале FATAL ERROR регистрируется сообщение электронной почты с приложенной ошибкой.

#!/usr/bin/ruby -w

require 'rubygems'

def mailer(line)

  date = `date +%D-%T`
  f = File.open("/root/error.mail", "w")
  f.puts("Subject: Fatal Error on SERVER #{date}\n\n#{line}")
  f.close
  system("sendmail guy@foo.com.com < /root/error.mail")
end

def fatal_check(file, pattern)

  f = File.open(file, "r")
  f.seek(0,IO::SEEK_END)
  while true do
    select([f])
    line = f.gets
    mailer("#{line}") if line=~pattern
    #system("./mailer.rb #{line}") if line=~pattern
  end
end

fatal_check("/root/test.log", /FATAL ERROR/)

1 Ответ

1 голос
/ 14 января 2011

Как насчет этого. Вам понадобится пара драгоценных камней:

gem install file-tail
gem install pony

А потом твой сценарий:

require 'rubygems'
require 'pony'
require 'file/tail'

def fatal_check(file, pattern)
  File::Tail::Logfile.open(file, :backward => 0) do |log|
    log.tail do |line| 
      date = `date +%D-%T`
      Pony.mail(:to => 'you@example.com', :from => 'me@example.com', :subject => "There was a nasty error on #{date}", :body => line)
    end
  end
end

fatal_check(File.dirname(__FILE__) + "/test.log", /FATAL/)
...