shell+curl监控网站页面(域名访问状态),并利用sedemail发送邮件

应领导要求,对公司几个主要站点的域名访问情况进行监控。下面分享一个监控脚本,并利用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.fangfull.com www.huanqiu.com erp.fangfull.com fanghuadmin.huanqiu.com www.hqsbtime.com qmjjr.huanqiu.com admin.huanqiu.com m.huanqiu.com fq.huanqiu.com mfq.huanqiu.com zc.huanqiu.com mzc.huanqiu.com uc.huanqiu.com fanghu.huanqiu.com img.huanqiu.com app.huanqiu.com

www.fangfull.cn www.huanqiu.wang.com

执行脚本:

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

测试利用上面的多线程的网站状态检测脚本的执行时间,如下,12s多执行完毕! [root@bastion-IDC ~]# time sh url-monit.sh HTTP Status of app.huanqiu.com is 301 HTTP Status of fanghu.huanqiu.com is 301 HTTP Status of www.huanqiu.com is 301 HTTP Status of fanghuadmin.huanqiu.com is 301 HTTP Status of admin.huanqiu.com is 301 HTTP Status of mfq.huanqiu.com is 301 HTTP Status of zc.huanqiu.com is 301 HTTP Status of erp.fangfull.com is 302 HTTP Status of www.fangfull.com is 200 HTTP Status of fq.huanqiu.com is 301 HTTP Status of img.huanqiu.com is 301 HTTP Status of www.hqsbtime.com is 200 HTTP Status of mzc.huanqiu.com is 301 HTTP Status of www.fangfull.cn is 000 HTTP Status of uc.huanqiu.com is 301 HTTP Status of qmjjr.huanqiu.com is 301 HTTP Status of m.huanqiu.com is 301 HTTP Status of www.huanqiu.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.fangfull.com is 200 HTTP Status of www.huanqiu.com is 301 HTTP Status of erp.fangfull.com is 302 HTTP Status of fanghuadmin.huanqiu.com is 301 HTTP Status of www.hqsbtime.com is 200 HTTP Status of qmjjr.huanqiu.com is 301 HTTP Status of admin.huanqiu.com is 301 HTTP Status of m.huanqiu.com is 301 HTTP Status of fq.huanqiu.com is 301 HTTP Status of mfq.huanqiu.com is 301 HTTP Status of zc.huanqiu.com is 301 HTTP Status of mzc.huanqiu.com is 301 HTTP Status of uc.huanqiu.com is 301 HTTP Status of fanghu.huanqiu.com is 301 HTTP Status of img.huanqiu.com is 301 HTTP Status of app.huanqiu.com is 301 HTTP Status of www.fangfull.cn is HTTP Status of www.huanqiu.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@huanqiu.cn和hugang@huanqiu.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@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m "[$url] can not normally access,please deal with it as soon as possible " /usr/local/bin/sendEmail -f ops@huanqiu.cn -t hugang@huanqiu.cn -s smtp.huanqiu.cn -u "Domain monitoring" -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.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 from@uhanqiu.cn                                 #发件人邮箱 -t to@huanqiu.cn                                     #收件人邮箱 -s smtp.huanqi.cn                                     #发件人邮箱的smtp服务器 -u "....."                                                   #邮件的标题 -o message-content-type=html                #邮件内容的格式,html表示它是html格式 -o message-charset=utf8                        #邮件内容编码 -xu from@huanqiu.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.fangfull.cn www.huanqiu.wang.com' + '[' 2 -ne 0 ']' + for url in '$DOMAIN' + /usr/local/bin/sendEmail -f ops@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.fangfull.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@huanqiu.cn -t wangshibo@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.huanqiu.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@huanqiu.cn -t huang@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.fangfull.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@huanqiu.cn -t hugang@huanqiu.cn -s smtp.huanqiu.cn -u 'Domain monitoring' -o message-content-type=html -o message-charset=utf8 -xu ops@huanqiu.cn -xp zh@123bj -m '[www.huanqiu.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@huanqiu.cn邮箱,发现已经收到报警邮件了!

最后添加计划任务,每5分钟执行一次 [root@bastion-IDC ~]# crontab -l #domain monit */5 * * * * /bin/bash -x /root/url-mail.sh >/dev/null 2>&1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

信息系统开发平台OpenExpressApp - ClickOnce智能部署

    这里讲的是OpenExpressApp的部署方案。主要使用的是ClickOnce作为实施方案来实现:智能部署和智能客户端。不过,这里的使用方式跟以往的不...

24450
来自专栏散尽浮华

Linux下Redis主从复制以及SSDB主主复制环境部署记录

前面的文章已经介绍了redis作为缓存数据库的说明,本文主要说下redis主从复制及集群管理配置的操作记录: Redis主从复制(目前redis仅支持主从复制模...

37070
来自专栏彭湖湾的编程世界

【webpack】webpack-dev-server生猛上手——让我们来搭一个webpack的微服务器吧!

[前言]:因为最近在搞****API的时候用到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的“收尾工作”——即打包...

52970
来自专栏技术翻译

使用Docker为Visual Studio Extensions创建专用存储库

如今的扩展和项目模板非常普遍; 我们每天都在Visual Studio中使用扩展。

16920
来自专栏Jerry的SAP技术分享

如何找到SAP Cloud for Customer标准培训和认证方面的信息

有一些朋友询问我如何在SAP官网上找到和SAP Cloud for Customer相关的标准培训信息,我这里把步骤写出来:

11010
来自专栏Java后端技术栈

使用快照和AOF将Redis数据持久化到硬盘中

我们知道Redis是一款内存服务器,就算我们对自己的服务器足够的信任,不会出现任何软件或者硬件的故障,但也会有可能出现突然断电等情况,造成Redis服务器中的数...

8020
来自专栏王亚昌的专栏

【zookeeper】安装指南

http://www.apache.org/dyn/closer.cgi/zookeeper/

9720
来自专栏技术博文

linux定时任务的设置

为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件       例如 文件内容如下:      */2 * * * *...

1.7K100
来自专栏zhangdd.com

redis的持久化方式RDB和AOF的区别

最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需...

10520
来自专栏哲学驱动设计

Rafy 框架 - 时间戳插件

在开发各类数据库应用系统时,业务领域实体往往需要包含“创建时间”、“最后更新时间”、“创建人”、“最后更新人”等跟踪戳属性。这些属性是领域实体的基本属性,几乎所...

9700

扫码关注云+社区

领取腾讯云代金券