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()); } ?> |
|