监控服务器存活的脚本,用ruby写的,需要安装有action_mailer gem,
检测主机的80端口是否可用
失败次数记录,超过指定次数判定主机Down掉
发送通知邮件到指定邮箱
在前面的日志中有说明怎样连接gmail来发送邮件的
require 'rubygems' require 'action_mailer' require 'ping' require 'fileutils' require 'tlsmail' #need install tlsmail gem to support TLS connect Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE) #发送通知from账户设置 ActionMailer::Base.smtp_settings = { :address => 'smtp.gmail.com', :port => '25', :domain => 'gmail.com', :user_name => 'username', :password => 'passwd', :authentication => :login } #recp: 收到通知的邮箱地址,可以填多个地址,逗号分隔 #sub: 邮件主题 #bo: 邮件内容 class SimpleMailer < ActionMailer::Base def simple_message(recp, sub, bo) from 'sender@gmail.com' recipients recp subject sub body bo end end class ServerMonitor def initialize #config @hit = 5 #最大失败次数,达到后才会发送邮件,避免误报 @tmp = "/tmp/server_monitor_tmp" #计数器地址 @recp = 'mytake6@gmail.com, std8545@yahoo.com.cn' #收信的邮箱地址 @host = ['www.ccok.me', 'www.google.com'] #需要监控的主机 #do not touch these @hosts = Struct.new(:host, :status) @servers, @msg = [], [] @host.each { |h| @servers << @hosts.new(h, true) } FileUtils.mkdir(@tmp) unless File.exists? @tmp end def run @servers.each do |s| num = Ping.pingecho(s.host, 5, 80) ? 0 : rf(s.host) + 1 File.open(dest(s.host), 'w') { |f| f.puts num } end @servers.each do |e| if rf(e.host) == @hit e.status = false File.open(dest(e.host), 'w') { |f| f.puts 0 } end end send_mail end def rf file return 0 unless File.exist?(dest(file)) File.open(dest(file), 'r').readlines.to_s.chomp.to_i end def dest host "#{@tmp}/#{host}" end def send_mail @servers.each { |m| @msg << m.host unless m.status } SimpleMailer.deliver_simple_message @recp, "server monitor", @msg.join(', ') + " is Down!!! " unless @msg.empty? end end #go ServerMonitor.new.run
可以放到crontab中每2分钟运行一次
2009-05-21 14:20:44, 16623 reviews, comment
send to mailbox
Soft Raid and LVM
[转载]Using temporary files in Ruby - Tempfile.new
[转载]5个有用的ruby gems
关于yield的使用
进程和线程
ruby写的一个随机发扑克类
Ruby和Erlang的交互
json_formatter
innotop / mysqlreport / mtop / DBD::mysql
监控mysql的性能
mysqlreport详解
MooseFS vs. NFS
少女,不点下广告吗!
all by shitou
blog comments powered by Disqus