shell+curl監控網站頁面(域名訪問狀態),並利用sendemail發送郵件

 

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

[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

執行腳本:bash

[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!
======================================================================
下面是郵件報警設置:app

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分鐘執行一次dom

[root@bastion-IDC ~]# crontab -l
#domain monit
*/5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1
相關文章
相關標籤/搜索