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を入れて実験するといいと思います。

人生設計

http://www.rubyist.net/~matz/20071019.html
Matz日記より

ベテランのアニメーターも老後の不安を抱える。
人気アニメ「あしたのジョー」の作画監督として有名な金山明博さん(68)は
「40年近くアニメの世界にいたが、契約社員として働くことが多く、
退職金ももらえなかった」と振り返る。

体調を崩して59歳で一線を退いた。今は月12万円の年金が頼りだ。
「同年代の業界仲間には生活保護を受けたり、ホームレスになった人もいる。
こんな環境で日本のアニメはいつまで持つのか」と心配する。
これをプログラマに置き換えたら、20年後のフリープログラマの姿でないと誰が言えようか。

つまり人生設計をたてることが重要です。
ただ、これはわざわざフリープログラマと書いて、
勤め人プログラマを除外しています。敢えて突っ込ませていただくと、
20年後に勤め人プログラマがホームレスになっていない保証はどこにもないです。
たかだか5年前に意気揚々とJavaの世界に就職したJavaプログラマ
意気消沈しかけています。Javaの仕事が無くならないことを祈っています。
もちろんJavaだけの話ではなく、プログラマ全体にあたると思っています。
会社に所属しているかとどうかと老後の不安は別問題だと思うんです。
老後の観点からいうと、会社に所属し続けるメリットは厚生年金ですよね。
だって、我々の年代は年金を本当に貰えるかどうかすらあやしいんですから。
新しい技術に挑戦し続けること、つまり自分に投資し続けることが重要だと思います。
50過ぎの第一線の技術者もいますよね。かっこいい。