shitou's blog 
Home About Feed | MIX BOY 塌客

Tags "linux"

21
May

服务器监控小脚本 by shitou

0

监控服务器存活的脚本,用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分钟运行一次


Tags: 监控,ruby,linux

2009-05-21 14:20:44, 582 reviews

send to mailbox

Your email:

29
Oct

Soft Raid and LVM by shitou

2

过两天要给一台服务器做Soft Raid, 以前在RHEL上做过, 由于这次要求的平台是Debian, 所以就查了些资料, 又虚拟机里做了下, 步骤和在RHEL中几乎一样(意料之中的, 都是Linux嘛:)), 就是在系统安装分区时设置raid分区格式就行了, 最后再挂载文件系统,

 

在查资料的过程中,一些资料比较老了, 从里面可以看到Debian早期的版本中(可能是3.0以前)安装soft raid在系统开始安装时需要输入boot的引导参数:

$expert

进入专家模式, 然后还要手工从光盘中加载raid的模块, 这样再分区时才会提供raid的支持, 由于我使用的是最新的4.0版本, 所以在从光盘中选择手工加载raid模块时, 提示说, 默认的已经加载了所有可能需要的模块了, 因此这个步骤就没了, 只用直接往下走就行了,

 

比起Debian和RHEL soft raid的区别主要在于, 前者使用的raid工具是mdadm, 而RHEL默认的是raidtools, 当然作用都是一样的.

 

这里重要说一下, 两块硬盘在设置soft raid时一定要注意GRUB的安装位置, 即/boot分区的位置, /boot分区不能安装在LVM和raid中, 否则将无法引导系统, 因此需要单独划一分区出来安装/boot分区, 还有就是 swap分区也没有必要做在raid中, 网上有一个说法是可以把/boot分区也安装在raid分区中, 不过需要修改/boot/grub/menu.lst文件中内核镜像的位置, 把对应的设备改成raid设备md(n), 这个应该是行的通的, 不过我没试过,

 

LVM和soft raid结合时, 理想的做法是, 为/boot和swap分区单独拿出来磁盘空间, 然后把剩下硬盘的空间全部划为一个物理分区, 做成raid, 然后再在raid设备上面 建立LVM的PV, VG和LV, 最后挂载文件系统, 这样做的好处就不用多说了, 分区大小就可以按照需求灵活控制了, 但是虽然这时候还可以利用LVM的特性按照需求增加或裁剪磁盘的空间, 但是当raid阵列中的磁盘空间不够时就不能够动态的添加硬盘了, 因为raid阵列中的硬盘是不能动态添加的,虽然LVM具有这样的特性

 

我参考过的文档连接:

 

Root on LVM on software RAID howto [Debian Etch]

Install Debian Etch on a Software Raid 1 with S-ATA disks

Installing Debian Sarge with software RAID

RAID and Data Storage Protection Solutions for Linux


Tags: linux

2008-10-29 12:20:22, 664 reviews

send to mailbox

Your email:

Tags

U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • iPhone[17]
  • Erlang[4]
  • google[8]
  • 生活[38]
  • 音乐[11]
  • 电影[11]
  • linux[20]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[5]
  • ruby[18]
  • ruby on rails[27]
  • 开源[3]

Episode

  • iPhoneException
  • shell
  • thread
  • memcache

Recent Comments

  • comment6, viagra bez receptu, revelation, ambie...
  • comment5, http://www.freecodesource.com/user/pr...
  • comment4, meridia medicine, :-<>], plavix clopi...
  • comment2, viagra calgary, resin, paxil vs wellb...
  • comment2, codeine promethazine, conclusion, buy...
  • comment2, clomid ovarian cysts, fronted, oxycod...
  • comment2, http://www.freecodesource.com/user/pr...
  • comment3, cipro allergy, :-E, weed and hydrocod...
  • comment2, http://www.freecodesource.com/user/pr...
  • comment4, vicodin cr, chocolate, premarin cance...

Popular Posts

  • MySQL Innodb备份
  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Lighttpd配置参数
  • iPhone上的HelloWorld终于跑起来了
  • Etag和Expire

Recommended Posts

  • Mai Kuraki -永远より ながく
  • U-ka saegusa IN db Final Best
  • Heaven Can Wait - Charlotte Gainsbou
  • Ruby遍历MemCached的key
  • Norah Jones - The fall
  • 请记得仰望梦想的姿势
  • Shell: 统计MySQL InnoDB表的大小
  • Rails Benchmark
  • 发送异常到邮箱
  • I Miss Nobody
  • Music4u, Vol. 1
  • my macbook
  • Mai Kuraki-Beautiful
  • 10首最伤情英文歌曲精选
  • Mai Kuraki - PUZZLE/Revive

Friends' blogs

  • levy
  • sphance
  • andreas

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 51144
  • 今天访问: 8
  • 日志: 172
  • 评论: 124
  • 音乐: 9
  • 用户: 148


 

just DO NOT support IE

close