偵測網站是否正常運行~運用批次檔來定時檢查紀錄和通知

承上次利用批次檔來自動檢查特定程式是否正常持續啟動方式,欲罷不能的利用批次檔來排程偵測遠端網站是否正常運行!這次我們要利用個小小工具 http-ping
0

其實小編之前用來偵測公司各網站,都是網路提供ㄧ些小工具,如checkhost,除廣告眾多外,不能排程檢查時間,有些無法指定通知 Mail ,不時因未網路、偵測電腦問題誤報造成許多重重困擾!所以下定決心寫個批次檔來偵測遠端網站是否正常,好處是可以搭配系統內的工作排程想多久偵測一次就多久偵測一次!且使用之前常使用的 sendEmail 小工具指定要通知的主旨、內容和寄件者,好唄!廢話太多,來看看小編怎麼做。
3

先來說說要怎麼偵測遠端網站,ping 這個指令大家都不陌生,採用是 ICMP 協定中送出 echo 要求封包與回應封包,用來檢查主機網路狀態是很方便的!但若是針對一般對外的網站,就不好使用了!畢竟 ping 只有回應時間和主機位置,網站就沒辦法正常顯示目前的狀態!所以文頭就有提到「http-ping」這個工具。
官網:http://www.coretechnologies.com/products/http-ping/
下載位置:http://www.coretechnologies.com/products/http-ping/http-ping.exe
(下圖為執行畫面)
4

使用方式很簡單,直接下此指定去偵測特定的網站,如 http-ping http://www.abc.com.tw,就會顯示網站目前 http 狀態碼,如下圖 Reply: [200/OK] 是正常運行,Reply: [404/Not Found] 是網站不正常顯示。(網站狀態可以參考 http 狀態碼維基百科
0

至此小編不再多著墨在 http-ping 各種功能,您可以使用 http-ping /? 指令查看,我們利用這個工具來寫出偵測網站狀態紀錄並通知的批次檔,內容如下:
echo off
echo ******************** 郵件程式偵測 ************************* >>D:\log\Webtest\WebtestDetection.log
echo 時間:%date% %time% >>D:\log\Webtest\WebtestDetection.log
d:\exe\http-ping.exe http://www.abc.com.tw > webtemp.log
FOR /F “skip=3 tokens=3” %%A IN (d:\exe\webtemp.log) do if %%A == [200/OK] goto alert_off

:alert_on
d:\exe\sendEmail\sendEmail.exe -f abc@abc.com -u [警告] 網站未正常運行 -m 網站未正常運行,發生時間 %date% %time% -t touser@abc.com -s mail.abc.com:25 -xu smtpuser -xp smatuerpassword -o message-content-type=html -o message-charset=utf8 -o tls=no
echo 網站未正常運行 >>D:\log\Webtest\WebtestDetection.log
echo 已發送緊告信件至 touser@abc.com >>D:\log\Webtest\WebtestDetection.log
goto end

:alert_off
echo 網站正常運行中 >>D:\log\Webtest\WebtestDetection.log

:end
echo ************************************************************* >>D:\log\Webtest\WebtestDetection.log

程式說明:
1. 先指定此批次檔自動寫一個 WebtestDetection.log ,並加註執行日期。(粉紅色部份,後面要 Troubleshooting 會比較好做)
2. 將 http-ping 偵測網站 www.abc.com.tw 結果寫入到 webtemp.log 檔案。(綠色部分,這個檔案是做後面分析使用)
3. FOR 迴圈讀出 webtemp.log 檔案,我們要的資訊就是 Reply: 後面的關鍵字元,所以呢我們在 FOR 迴圈後面加上選項設定”skip=3 tokens=3“(跳過三行;取第三個欄位;分隔字元為預設的空白不需另外下參數),所以關鍵字元為 [200/OK] (網站正常運行),則程式直接跳到 alert_off,否則繼續到 alert_on。
5

其中若您不能確定抓的關鍵字元是否是你要分析的關鍵字元,你可以用下面另外一個批次檔來測試 webtemp.log,讓他輸出關鍵字是否是你要的關鍵字,再來調整 skip 和tokens 兩個參數。
echo off
FOR /F “skip=3 tokens=3” %%A IN (d:\exe\webtemp.log) do (
echo %%A
)
pause
6

4.  如果到 alert_off,即網站正常運行,多加一個備註「網站正常運行中」到當日的 WebtestDetection.log 裡並結束。
1-1

5. 如果關鍵字元不是 [200/OK] (網站不正常運行)到 alert_on,先發一封警告信給 touser@abc.com ,並多加一個備註「網站未正常運行」、「已發送緊告信件至touser@abc.com」 到當日的 WebtestDetection.log,在跳至 end 完成批次檔動作,以下是警告信的內容。
2

6. 批次檔測試沒有問題後,記得放到任一台可以連上internet 的電腦之工作管理員設定排程(排定的工作),讓批次檔定時去檢查你的網站是否正常運行!打完收工,有問題再討論喔。

注意事項: 中文網站不能直接打中文,中文網域名稱轉換成punycode,請至網站 http://xn--fiq228c.tw/technology/punycode.htm 即可進行轉換。

 

 

 

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料