最近、ホームサーバーにDebian 9をセットアップしましたが、HDDに対してS.M.A.R.Tチェックを実行し、問題が発生した場合にアラートを受け取りたいと思います。理想的には、スマートフォンに接続しているので、アラートをSlackインスタンスに入れて、非常に便利だと思っています(UPSのアラートがあり、pingの失敗がそこに入ってきています)。
Smartd/smartctlを調べていましたが、通知をSlackに取り込む方法が見つからないようです。
どこかでbashスクリプトを呼び出して通知を処理し、通知をSlackに送信する別の(python)スクリプトを呼び出すことができると期待していました。
(編集:明確にするために、私はすでにPython Slack通知用のスクリプトを他の場所で使用しているので、そこでは問題ありません)
編集以下の両方のソリューションがテストされ、私にとってはうまく機能しました。なんらかの理由でSlackが機能しなくなった場合に備えて、メールとスクリプトのソリューションを選択しましたが、どちらも堅実で、環境変数を含めてくれたRalfFriedlに感謝します。
# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script
これはsda
用です。デバイスごとに1行追加します。または、/dev/sda
をDEVICESCAN
に置き換えて、検出されたすべてのデバイスを監視します。
/my/script
は終了するまでsmartd
がハングするため、時間がかかりすぎないようにしてください。
/my/script
は、さまざまな環境変数を使用して実行されます。 man smartd.conf
でSMARTD_DEVICE
を検索します。たとえば、別の変数:「SMARTD_FULLMESSAGE
はsmartdからの電子メール警告メッセージ文字列全体の内容に設定されます。」
メッセージングをテストするには、次の一時構成ファイルを使用してsmartdを起動し、テストメッセージを送信します。
# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script -M test
上記のいずれもテストしていません。 smartctl
を使用してテストすることにより、特定の-d
オプションを含める必要がある場合は、すでに解決済みだと思います。 (-d
とDEVICESCANがどのように相互作用するかはわかりません)。また、-a
のデフォルトのテストは、デバイスに必要なものと一致すると思います。たとえば、ロングマンページで言及されていることの1つは、不良セクタが再割り当てされた後、一部のドライブが誤検知を表示することです。 https://superuser.com/a/539040/110495 ==
smartd
でスクリプトを呼び出す場合は、オプション-w
を参照してください。
-w PATH、-warnexec = PATH
Smartdが警告メッセージを送信する必要がある場合は、デフォルトのスクリプトの代わりに実行可能PATHを実行します。 PATHは、実行可能なバイナリファイルまたはスクリプトを指している必要があります。デフォルトのスクリプトは
/etc/smartd_warning.sh
です。
スクリプトは通常、電子メールを送信するために使用されます。これらの環境変数で呼び出されます。
SMARTD_MAILER
は、存在する場合は-M execの引数に設定されるか、そうでない場合は「mail」に設定されます(例:/ usr/local/bin/mail、mail)。SMARTD_DEVICE
はデバイスパスに設定されます(例:/ dev/sda)。SMARTD_DEVICETYPE
は、「-d」ディレクティブまたは「auto」(ない場合)で指定されたデバイスタイプに設定されます。SMARTD_DEVICESTRING
はデバイスの説明に設定されます。 SMARTD_DEVICEで始まり、オプションのコントローラーIDが続く場合があります(例:/ dev/sda [SAT])。文字列にはスペースが含まれている可能性があり、引用符で囲まれていません。SMARTD_DEVICEINFO
はデバイス識別情報に設定されます。これには、smartctl -iによって出力される情報のほとんどが含まれていますが、短い1行の形式を使用しています。このデバイス情報は、smartdの起動時にもログに記録されます。文字列にはスペース文字が含まれており、引用符で囲まれていません。SMARTD_FAILTYPE
警告またはメッセージメールの理由を示します。可能な値とその意味は次のとおりです。
EmailTest:これはEメールテストメッセージです。
ヘルス:SMARTヘルスステータスは、差し迫った障害を示します。
使用法:使用法属性が失敗しました。
SelfTest:セルフテストの失敗の数が増加しました。
ErrorCount:ATAエラーログのエラー数が増加しました。
CurrentPendingSector:1つ以上のディスクセクターを読み取ることができず、再割り当て済みとしてマークされています(スペアセクターに置き換えられています)。
OfflineUncorrectableSector:オフラインテストまたはセルフテスト中に、1つ以上のディスクセクターを読み取ることができませんでした。
温度:温度が臨界限界に達しました(-Wディレクティブを参照)。
FailedHealthCheck:SMARTヘルスステータスコマンドが失敗しました。
FailedReadSmartData:読み取りコマンドSMART属性データが失敗しました。
FailedReadSmartErrorLog:SMARTエラーログを読み取るコマンドが失敗しました。
FailedReadSmartSelfTestLog:SMARTセルフテストログを読み取るコマンドが失敗しました。
FailedOpenDevice:デバイスへのopen()コマンドが失敗しました。SMARTD_ADDRESS
は、「-m」ディレクティブのアドレス引数ADDによって決定されます。 ADDがの場合、SMARTD_ADDRESSは設定されません。それ以外の場合は、引数ADDで指定された電子メールアドレスのコンマ区切りリストに設定され、コンマはスペースに置き換えられます(example:[email protected])。複数の電子メールアドレスが指定されている場合、この文字列にはスペース文字が含まれ、引用符で囲まれないため、シェルスクリプトで使用するには、二重引用符で囲むことができます。SMARTD_MESSAGE
は、smartdからの1文の要約警告メールメッセージ文字列に設定されます。このメッセージ文字列にはスペース文字が含まれており、引用符で囲まれていません。したがって、シェルスクリプトで$ SMARTD_MESSAGEを使用するには、おそらく二重引用符で囲む必要があります。SMARTD_FULLMESSAGE
は、smartdからの電子メール警告メッセージ文字列全体の内容に設定されます。このメッセージ文字列にはスペースと戻り文字が含まれており、引用符で囲まれていません。したがって、シェルスクリプトで$ SMARTD_FULLMESSAGEを使用するには、おそらく二重引用符で囲む必要があります。SMARTD_TFIRST
は、このタイプの最初の問題が報告された日時を示すテキスト文字列です。このテキスト文字列にはスペース文字が含まれ、改行は含まれず、引用符で囲まれていません。例:Sun Feb 9 14:58:19 2003 CSTSMARTD_TFIRSTEPOCH
は整数であり、SMARTD_TFIRSTのUNIXエポック(1970年1月1日からの秒数)です。SMARTD_PREVCNT
は、以前に送信されたメッセージの数を指定する整数です。最初のメッセージは「0」に設定されます。SMARTD_NEXTDAYS
は、次のメッセージが送信されるまでの日数を指定する整数です。 '-M once'で空に設定し、 '-Mdaily'で '1'に設定します。
詳細については、man smartd
およびman smartd.conf
を参照してください。