2022/02/25更新、 2021/09/17更新、 2013/03/09〜
S.M.A.R.TでHDDを監視し、エラー時メールを送信する。

S.M.A.R.TでHDDの状態をチェックする作業をcronで自動化し、エラー発生時はメール送信する様にしました。
2021/09/17 IDE、SATAの複数ドライブのチェックに対応しました。
2022/02/25 "No Errors Logged"を見ていましたが、意味がなっかみたいなので、具体的な値を見ることにしました。
 
S.M.A.R.Tのインストール
# apt-get install smartmontools
 
スクリプトの作成
このスクリプトをroot権限でcronに設定
#!/usr/bin/php
<?php
//HDDをチェックしメールするPHPスクリプト。 smartmail.php
//実行には smartmontools のインストールが必要。
// 20220225    チェックの方法を変更("No Errors Logged"では判定にならない)
// 20210917    複数ドライブに対応(IDE,SATAを検索して実行)
// 20130309    初版

//S.M.A.R.Tをチェック
$TXT=NULL;
exec('ls -1 /dev/hd? /dev/sd? 2>/dev/nul' , $DEVICES );
foreach( $DEVICES as $DRIVE ) {
    $TMP = shell_exec('smartctl -a '.$DRIVE);
    $VAL = 0;
    if(strpos($TMP,'Pending') !== false){
        //'$TMP'のなかに'Pending'が含まれている場合
        $KEY = shell_exec('echo "'.$TMP.'"|grep Pending');
        $VAL = shell_exec('echo "'.$KEY.'"|awk -F" " \'{print $10}\'');
    } elseif(strpos($TMP,'Uncorrect') !== false) {
        $KEY = shell_exec('echo "'.$TMP.'"|grep Uncorrect');
        $VAL = shell_exec('echo "'.$KEY.'"|awk -F" " \'{print $10}\'');
    }
    if( $VAL != 0 ){
        $TXT = $TXT.$DRIVE."\n".$KEY."\n".$TMP."\n";
    }
}

if( is_null($TXT) ) { exit; }

//エラーがあったらメール発信
//////////////////////////////////////////////////////////////////////////////
//ライブラリ読み込み
require_once("Mail.php");

//システムの日本語文字コードを明示的に設定する。
//これが合っていないと文字化けします。
//デフォルトのままだと合っていない場合があります。
mb_language("japanese");
mb_internal_encoding("UTF-8");

//接続設定
define("SMTP_HOST", "smtp.gmail.com");
define("SMTP_PORT", "587");
define("SMTP_USER", "Gmailuser");
define("SMTP_PSWD", "Gmailpassword");
define("SMTP_FROM", "Gmailuser@gmail.com");
define("SMTP_DEBUG", true); //デバッグ用(true/false)

//送信文作成
$to="atesaki@gmail.com";
$from=SMTP_FROM;
$subject="S.M.A.R.T ERROR by EPGREC";
$body=$TXT;

//日本語をエンコード
$body = mb_convert_encoding($body,"iso-2022-jp");
$subject=mb_encode_mimeheader(mb_convert_encoding($subject,"iso-2022-jp"));

//SMTPサーバーに接続
$params = array(
"host" => SMTP_HOST,
"port" => SMTP_PORT,
"auth" => true,
"username" => SMTP_USER,
"password" => SMTP_PSWD,
"debug" => SMTP_DEBUG,
);
$smtp = Mail::factory("smtp", $params);

//メールヘッダーの生成
$headers = array(
"To" => $to,
"From" => $from,
"Subject" => $subject,
);

//送信
$return = $smtp->send($to,$headers,$body);
if (PEAR::isError($return)){
echo("メール送信エラー:".$return->getMessage());
}

?>