いま運用している環境で、Becky君が常時メールを取っていないといけないようになっているんだけど、受信するメールが多すぎてたまにBeckyが落ちたりする。落ちたことに気づかないと後で困ったことになるので、プロセスを監視して落ちてたらメールを送るスクリプトを書いた。
最初BATファイルだけで完結すると思っていたんだけど、メールを送るコマンドというのは無いみたいなので、メール送信部分はVBScriptで書いた。
procwatch.bat
@echo off tasklist | find %1 > NUL if not errorlevel 1 ( echo %1 is undead. ) else ( echo %1 is ded. cscript //Nologo sendmail.vbs %1 )
sendmail.vbs
Rem args name = WScript.Arguments.Item(0) Rem mail settings mailFrom = "i_am_becky@tanamon.jp" mailTo = "mail_alert@tanamon.jp" useRemote = true server = "mail.tanamon.jp" port = 25 useAuth = false username = "" password = "" Set msg = CreateObject("CDO.Message") msg.From = mailFrom msg.To = mailTo msg.Subject = name + " is dead." msg.TextBody = "Help me!" If useRemote Then key = "http://schemas.microsoft.com/cdo/configuration/" msg.Configuration.Fields.Item(key + "sendusing") = 2 msg.Configuration.Fields.Item(key + "smtpserver") = server msg.Configuration.Fields.Item(key + "smtpserverport") = port msg.Configuration.Fields.Item(key + "smtpauthenticate") = useAuth If useAuth Then msg.Configuration.Fields.Item(key + "sendusername") = username msg.Configuration.Fields.Item(key + "sendpassword") = password End If msg.Configuration.Fields.Update End If msg.Send
設定値は各自修正すること。
ローカルにIISのSMTPサーバが起動していればuseRemote=falseでも(たぶん)動く。
あと、SMTP認証ありにもできるようにしたけど、環境が無いのでこっちもたぶん動く。
使い方
procwatch.bat "B2.exe"
で実行できる。実際にはタスク登録とかしておけば定期的に実行させるようにする。
VBScriptは初めて書いたんじゃないかと思う。
でもこのメール送信処理はきもいので2度と書かない。
追記
プロセスが強制終了された場合、強制終了ダイアログが表示されるが、その間はプロセスが残っているため、チェックにひっかからないみたい。そのため、強制終了ダイアログが表示されないように設定しておく必要があります。
@IT:Windows TIPS -- Hint:Microsoftへのエラー報告ダイアログを無効にする