読者です 読者をやめる 読者になる 読者になる

pdumpfsでファイルシステムエラーなどで例外が返ったらメールを送信してお知らせするスクリプト

debian ubuntu ruby

先日、お客様のサーバのRAIDコントローラが馬鹿になりました。
IOデータのRAIDコントローラはなんだかおかしな動作をするようです。
それで、調べたところ、ファイルシステムごと飛んでしまっています。
しかもだ。pdumpfsで毎日バックアップを取っていたのですが、
8月からpdumpfsも例外を起こして死んでしまっていたらしい。
そこで業を煮やしてpdumpfsが失敗して例外を返した時は
メールで管理者にお知らせするようなpdumpfsのラッパーみたいなものを作りました。
使い方は

/usr/bin/pdumpfs

にファイルがあるとします。

#!/usr/bin/ruby

load "/usr/bin/pdumpfs"
require "tmail"
require "kconv"

FROM="root"
TO="xibbar@gmail.com"
HOSTNAME="plan"

begin
  src, dest, base, config = parse_options
  pdumpfs = Pdumpfs::Pdumpfs.new(config)
  pdumpfs.validate_directories(src, dest)
  pdumpfs.start(src, dest, base)
rescue => e
  wprintf("%s", e.message)
  wprintf("%s", e.backtrace.join("\n")) if config[:backtrace]
  tmail=TMail::Mail.new
  tmail.subject="**** EMERGENCY ALLERT (#{HOSTNAME})****"
  tmail.body="pdumpfs failed.\n\n#{e.message}"
  tmail.from=FROM
  tmail.to=TO
  tmail.set_content_type("text","plain",{"charset"=>"us-ascii"})
  tmail.transfer_encoding="7bit"
  tmail.date=Time.now
  tmail.mime_version="1.0"
  mailsrc=tmail.encoded
  open("|/usr/sbin/sendmail -f#{tmail.from} #{tmail.to}","w"){|f|
    f.write(mailsrc)
  }
  exit(1)
end

これを/backup/pdumpfs_raise_notifier.rb あたりに置き、

chmod a+x /backup/pdumpfs_raise_notifier.rb

します。
FROM、TO、HOSTNAMEはお好みに変更しておいてください。
また、sendmailコマンドでメールが送信できるようにしておいてください。
これをcronに
00 04 * * * /backup/pdumpfs_raise_notifier.rb /var /backup
このような感じで登録しておくと毎朝4時にバックアップされます。
バックアップが失敗した場合はメールが送信されます。
メールを送信するテストはbeginとrescueの間に
raiseを入れて実験するといいと思います。