LS-VLでsmartdを有効化してみた(2)
smartd からメールが送信されるよう設定を追加
最近の症状は日替わりで、昨日は調子良かったのに今日はダメとか言う感じ。毎日できるだけ同じ時刻に寝て起きる生活を続けているのに、睡眠状態が日によってこうも違うのは何故なんだろう。不思議でならない。
昨夜は中途覚醒が午前2時と4時に2回あり、目が覚めた後も何とか眠れたのだけど、やはり眠りの質が良くないのだろうな。眠気がキツイ。
先日、LS-VLでsmartdが動くようにして定期的にセルフテストを行わせるようにしたので、今度はテスト結果をメールで送るようにできないか?と試してみた。
man smartd.confを読むと、メールで通知するには -m, -Mオプションを使うようだ。そしてメールの送信には mail(1)コマンドが使える事を想定しているため、mailコマンドか、mailコマンドと互換性のあるコマンドが必要になる。しかし LS-VLのシステム内をいくら探しても mailコマンドが無い!とは言っても、LS-VLの管理Webページにログインすると「システム」→「メンテナンス」には「メール通知設定」があるのだから、メール送信の機能を持っていない筈はない。調べてみたら「メール通知設定」で使われるのは "/usr/local/bin/sendmail.sh" というスクリプトで、これが cronによって設定した時刻に呼び出されるようになっていた。このスクリプトを更に読むと、
- ユーザー認証が "LOGIN(SMTP-AUTH)", "CRAM-MD5" の場合は sSMTP ("/usr/local/sbin/ssmtp") を使う。
- ユーザー認証が "使用しない", "POP before SMTP" の場合は "/usr/bin/tmail" を使う。
という仕組みになっているようだ。sSMTPは "POP before SMTP (PBS)" をサポートしていないので、こういう事になっているのだろうな。sSMTP (Simple SMTP) は分かるのだけど、tmailコマンドって何?ググってみたけど、Rubyのライブラリしか見つからない。ウチのプロバイダのSMTPサーバーは "POP before SMTP (PBS)" 認証なので(*1)、どうしても tmailコマンドを使わなければならないのだけど仕様が分からないよぉ。
仕方がないので、先の "/usr/local/bin/sendmail.sh" スクリプトの中から tmailを呼び出している処理を切り出して、mailコマンドもどきのスクリプト "/usr/local/bin/mail.sh" をでっち上げた。
#!/bin/sh
TMAIL="/usr/bin/tmail"
MAIL_CHARSET="ISO-2022-JP"
MAIL_ENCODEBIT=8
if [ -f /etc/melco/email ]; then
. /etc/melco/email
fi
MAILTO=$email_to1 # Send mail address
SUBJECT="$HOSTNAME info" # Mail subject
FROMADD="$HOSTNAME@$smtp" # From mail address
while [ "$1" != "" ]
do
case $1 in
-s) shift
SUBJECT=$1
;;
*) MAILTO=$1
;;
esac
shift
done
AuthPass=`cat /etc/melco/email_passwd`
$TMAIL -s $smtp -t $MAILTO -f $FROMADD ¥
-sub "$SUBJECT" -h "$HOSTNAME" ¥
-c $MAIL_CHARSET -b $MAIL_ENCODEBIT -p_a_s -p $pop3_server ¥
-p_user "${AuthUser:-user}" -p_pass "${AuthPass:-0000}" ¥
-p_port ${pop3_portno:-110} -s_port ${portno:-25}
exit $?
|
※)¥は実際には継続行を示すバックスラッシュ
見てのとおり非常に拙いイイカゲンな代物。パラメタは -sオプションと、送信先アドレスしかサポートしてないし、パラメタチェックも無し。これは smartd から呼び出される事だけを想定しているからで、man smartd.conf を読む限り、これ以外のパラメタは指定してこないようだからだ。
このスクリプトを使うよう、先にセルフテスト設定をした箇所に以下のように "/usr/local/etc/smartd.conf" に書き加えた。(赤字の部分は送信先メールアドレス)
/dev/sda -a -d sat -s (S/../.././04|L/../01/./05) ¥
-m hoge@xxxxx.ne.jp -M exec /usr/local/bin/mail.sh -M test
|
そして、smartdを再起動。
# /etc/init.d/smartd.sh restart
Stopping S.M.A.R.T. daemon: smartd.
Starting S.M.A.R.T. daemon: smartd.
|
-M testオプションを付けているので、smartdの起動時にテストメールが送信される。これでテストメールが届けば成功。以後は1日に1回メールが送信されて来ると思う(-s オプション指定時は -M dailyがデフォルトになるように読めた)のだけど、まぁ結果は明日と言うことで。
(*1):後で確認してみたら、実はユーザ認証を"使用しない"でもメール送信できた。でも結局 tmailを使わなければならない事に変わりはないわけだが、スクリプトは少し簡単にできるな。
|