先日低速病で有名なWD20EARSが突然OSから見えなくなる・・・という記事を書きましたが、HDDが突然見えなくと困るのでスクリプトを使ってHDDの死活監視をしてみたいと思います。
最近触っていないPythonを使ってプログラムを組みます。
死活監視の仕様
- LLを使って簡単にHDDの死活監視をする
- 該当ドライブが存在しているか定期的にチェック
- 存在していない場合、メールでアラートを出す
Pythonの環境を作る
-
Pythonをインストールする
何はともあれ、Pythonがインストールされていないとお話になりませんのでインストールしましょう。
バージョンが2.x系と3.x系がありますが、私は2.7.xを使っています。
2.x系を使う理由は安定性と3.x系の動向がどうなるか分からなかったから。 -
pywin32をインストールする
win32apiをコールすることができるpywin32をインストールしましょう。
プログラムを組んでみる
メール送信はウノウラボさんのPythonでメールを送信したい人のためのサンプル集の記事を参考にしました。
#coding:shift-jis
#
# HDD死活監視プログラム
# version - 1.0.0
#
#base module
import os, sys, datetime
import datetime
#pywin32 module
import win32api
#config-file parser module
import ConfigParser
#gmail
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
def create_message(from_addr, to_addr, subject, body, encoding):
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def send_via_gmail(from_addr, to_addr, msg):
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('Gメールのアドレス', 'パスワード')
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
def logging(msg):
now = datetime.datetime.now()
log_msg = str(now) + '\t' + (msg) + '\n'
LOG_FILE = os.path.join(os.path.dirname(__file__), 'log.txt')
write_file(LOG_FILE, log_msg)
def write_file(file_path, msg):
file = open(file_path, 'a')
file.write(msg)
file.flush()
file.close()
if __name__ == '__main__':
hdd_path = '監視するドライブ文字(例c:)'
#ドライブチェック-pywin32使用-
try:
chkhdd = win32api.GetDiskFreeSpaceEx(hdd_path)
log_msg = 'Active'
except:
print('no hdd')
print('alert email sending...')
#Gメール送信
from_addr = '送信元メールアドレス'
to_addr = '宛先メールアドレス'
to_subj = u'HDDが見えなくなりました'
to_body = u'サーバのHDDが見えなくなりました。\n確認してください!'
msg = create_message(from_addr, to_addr, to_subj, to_body, 'ISO-2022-JP')
send_via_gmail(from_addr, to_addr, msg)
log_msg = 'Error! No HDD'
logging(log_msg)
quit()
タスクスケジューラで定期的にチェック
後はタスクスケジューラを使って定期的にプログラムを実行します。
私は15分に1回実行するようにしました。
プログラムは10分程度で作れましたが、正直こんなプログラム組まずに、HDDがずっと見える状態であればいいんですけどね・・・
それにしても、Pythonは手軽&高機能ですな~!