Wgetとメールを使ったお手軽サーバ死活監視:Windows環境でちょっとした定型業務を自動化する(2/2 ページ)
管理下のWebサーバが止まったら、速やかに管理者の携帯端末へメールで通知する。そんな死活監視システムを、無償のソフトウェア・ツールとバッチ・ファイルを組み合わせて簡単かつ手軽に実現しよう。
どうやって障害発生を知らせる?
障害を検知したら、次は携帯電話やスマートフォンに通知メールを送信しよう。これなら外出中でも受け取りやすい。ここでは自動化するために、コマンドラインからメールを送信できる「SMAIL」という無償で利用できるツールを使ってみる。
- ダウンロード・SMAIL
※商用利用の場合は、あらかじめ作者に事前連絡が必要。詳細は同梱のreadme.txtを参照していただきたい
SMAILをセットアップするには、まず「◆バージョン履歴・ダウンロード」の枠から最新版インストーラのZIPファイル(smail-v<バージョン番号>.zip)をダウンロードする。そこから実行ファイルの「smail.exe」だけを、実行パスに含まれるフォルダに解凍する。
次にオプションを指定せずにsmail.exeを起動すると初期設定画面が表示されるので、送信先のメール・サーバに合わせて「■SMTPサーバ」の設定を行う。具体的には、SMTP認証のためのIDとパスワードの指定、暗号化プロトコルの選択などが必要だ。メール・サーバによって設定内容が異なるので、SMAILのアーカイブに含まれる「SMAIL設定参考資料.pdf」を参照して設定する。社内メール・サーバなら、担当の管理者に確認しよう。
SMAILの初期設定画面
smail.exeを実行すると、この画面が表示される。ここで設定した内容は、smail.exeと同じフォルダにsmail.iniというファイル名で保存され、以後のSMAILによるメール送信時に参照される。
(1)SMTPサーバの設定。ここではGmailのメール・サーバに合わせて設定してある。ポート番号や暗号化プロトコルなど、メール・サーバ固有の設定が必要だ。Gmailなど有名なメール・ボックス・サービスであれば、SMAILのアーカイブに含まれる「SMAIL設定参考資料.pdf」を参照して設定する。社内メール・サーバであれば、その管理者に問い合わせて確認しよう。
(2)メール・サーバがメール送信時にPOP before SMTPやPOP over SSLを要求しなければ、こちらの設定を変更する必要はない。
設定後、[保存]ボタンと[終了]ボタンをクリックすれば初期設定は完了だ。さっそくテスト・メールを送信してみよう。あらかじめメール本文のテキストをhonmon.txtというファイルに保存してから、次のコマンドラインを実行すると、送信者「xxxxxxx@gmail.com」から受信者「xxxxxxx@willcom.com」にテスト・メールが届くはずだ。
C:¥temp>smail -hsmtp.gmail.com -fxxxxxxx@gmail.com -s"テスト・メール" -Fhonmon.txt xxxxxxx@willcom.com -i ……「xxxxxxx@gmail.com」は送信者アドレス、「xxxxxxx@willcom.com」は受信者アドレス
#---------------------- SMAIL 4.17 Information By Eva ------------------- ……以下は送信時の各種設定一覧
#設定ファイル : [C:¥bin¥smail.ini]
#POP before SMTP : 使わない
#APOP : 使わない
#SMTP認証 : 使う AUTH PLAINを利用
#SMTPアカウント : xxxxxxx@gmail.com
#SMTPS (SMTP over SSL) : 使う[OpenSSL 1.0.1e]
#SSL方式 : v2/v3
#STARTTLS : 使わない
#本文ファイル :honmon.txt [19 bytes]
#添付ファイル :なし
#メールサーバ :smtp.gmail.com
#メール送り元 :xxxxxxx@gmail.com
#メール送り先 :xxxxxxx@willcom.com
#サブジェクト内容 :テスト・メール
#キャラクターセット :ISO-2022-JP
#エンコーディング :7bit
#//メールヘッダー送信完了 (1.62sec)....
#//メール本文送信中 ....
#//メール本文送信完了 (1.78sec)....
C:¥temp>
コマンドライン・オプションの意味は次の通りだ。
オプション | 意味 |
---|---|
-h<メール・サーバのFQDNまたはIPアドレス> | 【必須】SMTPで送信するメール・サーバの指定 |
-f<送信者アドレス> | 送信者のメール・アドレスの指定 |
-s<サブジェクト> | サブジェクト(表題)の指定 |
-F<本文ファイル名> | 本文を記したテキスト・ファイルの指定 |
<受信者アドレス1>,CC:<受信者アドレス2>,BCC:<受信者アドレス3> | 【必須】受信者のメール・アドレスの指定。アドレスの前に「CC:」「BCC:」を付けると、それぞれCc/Bccで送信される。複数の場合は半角カンマで区切る |
-i | 送信時の各種設定を一覧表示する |
-d | デバッグ表示モード。SMAILとメール・サーバ間のSMTPでのやり取りを確認できる |
-a<添付ファイル名> | 添付ファイルの指定。複数の場合は半角カンマで区切る |
SMAILの主要なコマンドライン・オプション 半角スペースや「<」「>」を含むパラメータを指定する場合は、「-f"Shimada mobile <xxxxxx@willcom.com>"」のようにダブルクォートでくくる。ほかのオプションについては「smail -?」で表示されるオプション一覧や同梱のreadme.txtを参照していただきたい。 |
障害通知メールを送る際には、状況を素早く把握するためにサブジェクトに監視対象URL、メール本文にWget実行時のメッセージ(標準エラー出力)をそれぞれ記入してみよう。それには以下のようにバッチ・ファイル内で環境変数とリダイレクトを組み合わせれば実現できる。
set TargetURL=http://locationsmart.org/index.php
set SMTPServer=smtp.gmail.com
set MailFrom="Shimada Gmail <xxxxxxx@gmail.com>" ……「<」「>」が含まれるのでダブルクォートでくくる
set MailTo="xxxxxxx@willcom.com"
set MailSubject=【死活監視】 %TargetURL% で障害発生を検知しました ……監視対象URLをサブジェクトに挿入
set MailBody=honmon.txt
set SMAILOpt=-i
echo こちらは死活監視プログラムです。> %MailBody% ……リダイレクトを利用してメール本文を生成
echo %TargetURL% で障害の発生を検知したのでお伝えします。>> %MailBody%
echo.>> %MailBody%
echo ----- 以下はwgetの標準エラー出力です ----->> %MailBody%
type wget.stderr.log>> %MailBody% ……Wget実行時の標準エラー出力をメール本文に挿入
echo ----->> %MailBody%
smail %SMAILOpt% -h%SMTPServer% -f%MailFrom% -s"%MailSubject%" -F"%MailBody%" %MailTo%
以上で死活監視に必要な機能は揃った。エラー処理も加えたバッチ・ファイルは以下からダウンロードできる。
- 死活監視のバッチ・ファイル
※「alive_monitoring_cmd.txt」というファイルが解凍されるので、「alive_monitoring.cmd」にリネームしてから利用していただきたい
複数のWebサイトを一度に監視できるように、監視対象URLは上記のバッチ・ファイルと同じフォルダにある「list-url.txt」から取得するようにしてある。このテキスト・ファイルを新規作成し、次のように1行ずつ<監視対象URL>と<対象ページの文字コードに対応したnkfのオプション>、<検索文字列>をタブで区切って記しておくと、上記のバッチ・ファイルが1つずつWgetでアクセスしていくという仕組みだ。
http://locationsmart.org/index.php -W >新着マップなど、最新情報発信中!</p>
http://bbs.hotfix.jp/ -S HotFix Report
↑それぞれタブ1文字で区切って記述する
<対象ページの文字コードに対応したnkfのオプション>には、下表を参考にnkfのオプションを記述する。
文字コード | nkfのオプション |
---|---|
UTF-8 | -W8 |
JISまたはISO-2022-JP | -J |
EUC-JP | -E |
Shift_JIS | -S |
ダウンロードされるHTMLファイルの文字コードと、list-url.txtで2カラム目に指定するnkfのオプションとの対応 あらかじめ監視対象URLからダウンロードされるHTMLファイルの文字コードを調べておき、それに対応するnkfのオプションをlist-url.txtの2カラム目に記述する。このオプションは必ず大文字で指定すること。 |
また、バッチ・ファイル内の「SMAILの設定」にあるSMTPサーバのアドレスと送信者メール・アドレス、受信者メール・アドレスもあらかじめ指定しておいていただきたい。
どうやって自動化する?
あとは、常時稼働しているWindowsマシン上で、このバッチ・ファイルを5分ぐらいの間隔で自動実行すればいい。それにはまず、次のTIPSを参考にしてタスク・スケジューラで1日1回バッチ・ファイルを起動するタスクを作成する。
なお、タスクを起動する時刻は何時でもよい。
1日1回起動するタスクの作成
これはタスク・スケジューラで[基本タスクの作成]を実行したときに表示されるウィザードの「タスク トリガー」画面。タスクを起動する頻度を指定する。
(1)これを選んで次に進む。5分に一回起動する設定はタスク作成後に行う。
バッチ・ファイルを実行するための設定
これは[基本タスクの作成]ウィザードの「プログラムの開始」画面。実行するバッチ・ファイルとコマンドライン・オプション、実行時のカレント・フォルダを指定する。
(1)起動するバッチ・ファイルのパスとファイル名を指定する。スペースが含まれる場合はダブルクォートでくくる。
(2)起動するバッチ・ファイルのパスを指定する。ダブルクォートではくくらないこと。
次に、タスクのトリガーを編集して「1日中」「5分間隔」でタスクを繰り返し実行するように変更する。それには次のTIPSを参考にして設定する。
5分おきにタスクを起動するためのトリガー設定
バッチ・ファイル起動のために作成したタスクのプロパティを開き、[トリガー]タブで対象のトリガーをダブルクリックすると、このダイアログが表示される。
(1)前述のように1日1回起動するタスクを作成すると、このように設定されているはずだ。[開始]は、タスク作成時に指定した日時のままでよい。
(2)チェックを入れてオンにし、「5 分間」を選ぶ。
(3)「1 日間」を選ぶ。
(4)チェックを入れてオンにし、「4 分間」と入力する。これにより、何らかのトラブルによって終了しないタスクを強制的に終了させることでタスクが多重起動するのを防ぐ。
さらに対話的ログオンをしていなくても実行できるように、タスクの[全般]タブの「セキュリティ オプション」−[ユーザーがログオンしているかどうかにかかわらず実行する]ラジオボタンを選択する(詳細は次のTIPS参照)。
- TIPS「ログオフ中でもタスクを起動させる方法」
対話的ログオンをしていなくてもタスクを起動するための設定
これはタスクのプロパティを開いて[全般]タブを選んだところ。
(1)このラジオボタンを選ぶ。
(2)(1)を選んだことでタスクの実行に失敗するようになった場合は、試しにこのチェックボックスをオンにして有効にしてみる。詳細は前掲のTIPSを参照していただきたい。
以上でタスク・スケジューラの設定は完了だ。
このタスクが繰り返し実行されている最中でも、対象のWebサイトが正常にアクセスできる限り、通知メールは届かない。もしWebサイトが停止すると、次回のタスク実行時から復旧するまで、次のようなメールが繰り返し届くはずだ。
本稿では無償のコマンドライン・ツールとバッチ・ファイルを組み合わせて、Webサイトの死活監視プログラムを自作してみた。決して本格的かつ網羅的な監視ができるわけではないが、それでもWebサーバのダウンなど致命的なトラブルは速やかに検知できる。またカスタマイズができるというメリットもある。例えば、Wgetの代わりにデータベースやDNSなどのサービスにアクセスできるコマンドライン・ツールを用いれば、バッチ・ファイルを大幅に書き換えることなく、ほかのサービスの死活監視にも応用できる。
「もっと簡単な方法がある」「この監視サービスの方が便利だ」といったご意見・提案などがあれば、ぜひ本ページのツイート・ボタンでつぶやくか、本誌のFacebookページに書き込みをお願いしたい。
「運用」
Copyright© Digital Advantage Corp. All Rights Reserved.