Shell+Curl監控網站頁面訪問狀態,利用SendEmail發郵件通知


 

下面分享一個監控腳本,對公司幾個主要站點的域名訪問情況進行監控,並利用sendemail進行郵件發送。監控腳本里寫了一個多線程的網站狀態檢測腳本,直接從文件中讀出站點地址,然后用curl去檢測返回碼,發現速度非常好,基本幾秒鍾內就能出結果。

[root@bastion-IDC ~]# cat url-monit.sh 
#!/bin/bash
#取出網站數據
data=`cat /root/url.list`
if [ -z "$data" ];then
echo "Faild to connect database!"
exit 1
fi
test -f result.log && rm -f result.log
function delay {
sleep 2
}
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 6<>$tmp_fifofile
rm $tmp_fifofile
#定義並發線程數,需根據vps配置進行調整。
thread=100
for ((i=0 ;i<$thread;i++ ))
do
echo
done>&6
#開始多線程循環檢測
for url in $data
do
read -u6
{
#curl抓取網站http狀態碼
code=`curl -o /dev/null --retry 3 --retry-max-time 8 -s -w %{http_code} $url`
echo "HTTP Status of $url is $code ">>result.log
#判斷子線程是否執行成功,並輸出結果
delay && {
echo "HTTP Status of $url is $code"
} || {
echo "Check thread error!"
}
echo >& 6
}&
done
#等待所有線程執行完畢
wait
exec 6>&-
exit 0

[root@bastion-IDC ~]# cat url.list
www.shibo.com
www.kevin.com
erp.shibo.com
graceadmin.kevin.com
www.hqsbtime.com
qmjjr.kevin.com
admin.kevin.com
m.kevin.com
fq.kevin.com
mfq.kevin.com
zc.kevin.com
mzc.kevin.com
uc.kevin.com
grace.kevin.com
img.kevin.com
app.kevin.com

www.shibo.cn 
www.kevin.wang.com

執行腳本:

[root@bastion-IDC ~]# sh url-monit.sh 
HTTP Status of app.kevin.com is 301
HTTP Status of grace.kevin.com is 301
HTTP Status of www.kevin.com is 301
HTTP Status of graceadmin.kevin.com is 301
HTTP Status of admin.kevin.com is 301
HTTP Status of mfq.kevin.com is 301
HTTP Status of zc.kevin.com is 301
HTTP Status of erp.shibo.com is 302
HTTP Status of www.shibo.com is 200
HTTP Status of fq.kevin.com is 301
HTTP Status of img.kevin.com is 301
HTTP Status of www.hqsbtime.com is 200
HTTP Status of mzc.kevin.com is 301
HTTP Status of www.shibo.cn is 000
HTTP Status of uc.kevin.com is 301
HTTP Status of qmjjr.kevin.com is 301
HTTP Status of m.kevin.com is 301
HTTP Status of www.kevin.wang.com is 000

測試利用上面的多線程的網站狀態檢測腳本的執行時間,如下,12s多執行完畢!

[root@bastion-IDC ~]# time sh url-monit.sh
HTTP Status of app.kevin.com is 301
HTTP Status of grace.kevin.com is 301
HTTP Status of www.kevin.com is 301
HTTP Status of graceadmin.kevin.com is 301
HTTP Status of admin.kevin.com is 301
HTTP Status of mfq.kevin.com is 301
HTTP Status of zc.kevin.com is 301
HTTP Status of erp.shibo.com is 302
HTTP Status of www.shibo.com is 200
HTTP Status of fq.kevin.com is 301
HTTP Status of img.kevin.com is 301
HTTP Status of www.hqsbtime.com is 200
HTTP Status of mzc.kevin.com is 301
HTTP Status of www.shibo.cn is 000
HTTP Status of uc.kevin.com is 301
HTTP Status of qmjjr.kevin.com is 301
HTTP Status of m.kevin.com is 301
HTTP Status of www.kevin.wang.com is 000

real 0m12.782s
user 0m0.085s
sys 0m0.096s

下面再測試直接curl監測網站狀態的時間:

[root@bastion-IDC ~]# cat testurl-monit.sh 
#!/bin/bash

for url in `cat /root/url.list`
do
code=`curl -I -s $url | head -1 | cut -d " " -f2`
echo "HTTP Status of $url is $code "
done

如下,這個腳本執行時間要30s多!

[root@bastion-IDC ~]# time sh testurl-monit.sh
HTTP Status of www.shibo.com is 200 
HTTP Status of www.kevin.com is 301 
HTTP Status of erp.shibo.com is 302 
HTTP Status of graceadmin.kevin.com is 301 
HTTP Status of www.hqsbtime.com is 200 
HTTP Status of qmjjr.kevin.com is 301 
HTTP Status of admin.kevin.com is 301 
HTTP Status of m.kevin.com is 301 
HTTP Status of fq.kevin.com is 301 
HTTP Status of mfq.kevin.com is 301 
HTTP Status of zc.kevin.com is 301 
HTTP Status of mzc.kevin.com is 301 
HTTP Status of uc.kevin.com is 301 
HTTP Status of grace.kevin.com is 301 
HTTP Status of img.kevin.com is 301 
HTTP Status of app.kevin.com is 301 
HTTP Status of www.shibo.cn is 
HTTP Status of www.kevin.wang.com is

real 0m31.689s
user 0m0.067s
sys 0m0.124s

顯然多線程的測試腳本執行速度要快點!所以保留第一個腳本url-monit.sh!
======================================================================
下面是郵件報警設置:

1)先下載安裝包到本地,解壓。
[root@bastion-IDC ~]# cd /usr/local/src/
[root@bastion-IDC src]# wget -c http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@bastion-IDC src]# tar -zvxf sendEmail-v1.56.tar.gz
[root@bastion-IDC src]# cd sendEmail-v1.56
[root@bastion-IDC sendEmail-v1.56]# cp -a sendEmail /usr/local/bin/
[root@bastion-IDC sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@bastion-IDC sendEmail-v1.56]# file /usr/local/bin/sendEmail
/usr/local/bin/sendEmail: a /usr/bin/perl -w script text executable

2)安裝下依賴
[root@bastion-IDC sendEmail-v1.56]# yum install perl-Net-SSLeay perl-IO-Socket-SSL -y

3)部署發送腳本
這里由於一些域名做了跳轉,所以如果發現域名訪問后的結果不是200,301,302,那么就是不能正常訪問狀態,需要發送報警郵件!

如下,報警郵件發送給wangshibo@kevin.cn和hugang@kevin.cn兩個郵箱:
[root@bastion-IDC ~]# cat url-mail.sh 
#!/bin/bash
NUM=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|wc -l)
DOMAIN=$(/bin/sh /root/url-monit.sh|grep -v "200"|grep -v "301"|grep -v "302"|awk -F" " '{print $4}')
if [ $NUM -ne 0 ];then
for url in $DOMAIN;do
/usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible "
/usr/local/bin/sendEmail -f ops@kevin.cn -t hugang@kevin.cn -s smtp.kevin.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible "
done
else
echo "it is OK"
fi

==========================================================================================
郵件發送參數說明:
命令說明:
/usr/local/bin/sendEmail                         #命令主程序
-f ops@kevin.cn                                  #發件人郵箱
-t wangshibo@kevin.cn                            #收件人郵箱
-s smtp.kevin.cn                                 #發件人郵箱的smtp服務器
-u "....."                                       #郵件的標題
-o message-content-type=html                     #郵件內容的格式,html表示它是html格式
-o message-charset=utf8                          #郵件內容編碼
-xu ops@kevin.cn                                 #發件人郵箱的用戶名
-xp zh@123bj                                     #發件人郵箱密碼
-m "......"                                      #郵件的具體內容
=========================================================================================

[root@bastion-IDC ~]# sh -x url-mail.sh
++ /bin/sh /root/url-monit.sh
++ grep -v 200
++ grep -v 301
++ grep -v 302
++ wc -l
+ NUM=2
++ /bin/sh /root/url-monit.sh
++ grep -v 200
++ grep -v 301
++ grep -v 302
++ awk '-F ' '{print $4}'
+ DOMAIN='www.shibo.cn
www.kevin.wang.com'
+ '[' 2 -ne 0 ']'
+ for url in '$DOMAIN'
+ /usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.shibo.cn] can not normally access,please deal with it as soon as possible '
Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully!
+ for url in '$DOMAIN'
+ /usr/local/bin/sendEmail -f ops@kevin.cn -t wangshibo@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.kevin.wang.com] can not normally access,please deal with it as soon as possible '
Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully!
+ for url in '$DOMAIN'
+ /usr/local/bin/sendEmail -f ops@kevin.cn -t huang@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.shibo.cn] can not normally access,please deal with it as soon as possible '
Oct 25 19:21:43 bastion-idc sendEmail[19668]: Email was sent successfully!
+ for url in '$DOMAIN'
+ /usr/local/bin/sendEmail -f ops@kevin.cn -t hugang@kevin.cn -s smtp.kevin.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@kevin.cn -xp zh@123bj -m '[www.kevin.wang.com] can not normally access,please deal with it as soon as possible '
Oct 25 19:21:47 bastion-idc sendEmail[19672]: Email was sent successfully!

登陸wangshibo@kevin.cn郵箱,發現已經收到報警郵件了!最后添加計划任務,每5分鍾執行一次

[root@bastion-IDC ~]# crontab -l
#domain monit
*/5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM