pdumpfsでファイルシステムエラーなどで例外が返ったらメールを送信してお知らせするスクリプト
先日、お客様のサーバの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を入れて実験するといいと思います。