結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

Linux(CentOS)でRAID1運用しているディスクにエラーが発生したときメール通知させる方法

方法自体は大したことやってないのですが、備忘録として書いておきます。

メールの通知先がGmailの場合は、先日書いた以下の記事も参考にしてください!
taiyakisun.hatenablog.com

手順

RAIDシステム状態を確認するスクリプト

以下のperlスクリプトを、メールアドレス部分を自身のものに書き換えてから任意のファイルに保存します。
なお、perlが入ってない人はyum等でインストールしてください。

#!/bin/perl
use strict;

my @mdstat_lines = `cat /proc/mdstat`;
my $mdstat_len   = @mdstat_lines;
my $mail_msg;

for ( my $i=1; $i < $mdstat_len;  )
{
    if ( ($mdstat_lines[$i] eq "") or ($mdstat_lines[$i] =~ /Personalities/) )
    {
       ++$i;
       next;
    }

    if ( $mdstat_lines[$i] =~ /unused devices/ )
    {
       # The last line of the mdstat output.
       last;
    }

    if ( !($mdstat_lines[$i] =~ /([a-zA-Z0-9]+) : .+/g) or !defined($1) )
    {
       ++$i;
       next;
    }

    my $id = $1;

    # Going to next line.
    ++$i;

    if ( !($mdstat_lines[$i] =~ /blocks .+ \[([U_][U_])\]/g) or !defined($1) )
    {
       ++$i;
       next;
    }

    my $status = $1;

    if ( $status ne "UU" )
    {
       $mail_msg .= "Warning. RAID1 disks(" . $id . ") may have some errors(" . $status . ").\n";
    }

    ++$i;
}

if ( $mail_msg ne "" )
{
    open FH,'|mail -s "[Warning] Home server RAID system errors have been detected." mygmailaddress@gmail.com' or die;
    print FH $mail_msg;
    close FH;
}
cronで定期的にスクリプトを実行させる

ここでは例として一日に一回実行させてみることにします。

crontab -e

perlスクリプトを/usr/local/bin/chkmdstat.plとして保存していて、毎日午前0時に実行する場合の例は以下です。

0 0 * * * /usr/local/bin/chkmdstat.pl

念のためですが、以下も忘れないようにしておいてください。

chmod +x /usr/local/bin/chkmdstat.pl

参考サイト

rfs.jp

プライバシーポリシー お問い合わせ