最近在网上找了下通过shell编写一个脚本来监控网页是否正常,如果不正常则促发邮件告警,修复后有一个修复的通知邮件;但一直没有找到全面的,所以自己研究了下,写了一个linux对接邮箱和通过shell写了一个监控网页的脚本,如果有兴趣的可以参考下,不过我也是一个新手,写的不好,请不要见怪。 

分两个大步骤:

步骤一 linux对接邮箱:
1.首先需要安装mailx

如果你是最小化安装的centos/redhat 系统,是没有自带mailx的,也就是没有mail 命令。

yum -y install mailx

2.编辑配置文件 /etc/mail.rc
vim /etc/mail.rc | tail -10
fwdretain subject date from to
# For Linux and BSD, this should be set.
set bsdcompat
set from=test@163.com
set smtp=smtp.163.com
set smtp-auth-user=test@163.com
set smtp-auth-password=123456
set smtp-auth=login
3.对配置说明
from: 对方收到邮件时显示的发件人
smtp :指定第三方发邮件的smtp服务器地址(如qq,163,也可是公司的邮件服务器)
set smtp-auth-user: 邮件账号的用户名
set smtp-auth-password: 邮件账号的密码,有些邮箱填授权码
smtp-auth: SMTP 的认证方式,默认是login , 也可以改成CRAM-MD5 或 PLAIN 方式。
4.测试邮箱是否对接成功
echo "访问OK." | mail -s " 访问已经恢复" test1@163.com
步骤二shell编写监控的URL:
vim checkweb.sh
#!/bin/bash
#需要接收告警的邮箱
mail1=test1@163.com
mail2=test2@163.com
#网站url地址
URL="http://www.baidu.com"
logsize=`ls -l /data/script/checkweb.log| awk '{print $5}'`
if [ -n $logsize ]
then
>/data/script/checkweb.log
fi
while true
date=$(date -d "today" +"%Y-%m-%d-%H:%M:%S")
do
sleep 60
#获取http响应代码
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`
#服务器能正常响应,应该返回200的代码
if [ $HTTP_CODE = 200 ]
then
if [ -f /tmp/checkwebfault.log ]
then
`rm -rf /tmp/checkwebfault.log`
else
echo "$date $URL 访问OK." >>/data/script/checkweb.log
[ ! -f "/tmp/checkwebsucceed" ] || continue
echo "$date $URL 故障已修复." | mail -s "网站故障已经修复" $mail1 $mail2
`touch /tmp/checkwebsucceed`
fi
elif [ $HTTP_CODE != 200 ] && [ ! -f "/tmp/checkwebfault.log" ]
then
echo "$date $URL 已无法访问,请尽快处理." | mail -s "网站紧急故障告警" $mail1 $mail2
`touch /tmp/checkwebfault.log`
`rm -rf /tmp/checkwebsucceed `
fi
done
脚本思路:
1.通过CURL访问后判断这个URL里面返回的值是否为200;如果是则页面正常,否则不正常;
2.如果正常,检查是否有错误的临时文件,有则删除,如果没有临时错误文件,则会发送一个邮件通知是成已经修复,且会生成一个成功的临时文件,后面通过判断这个文件是否存来判断是否还需要发送邮件,避免无休止发送邮件告警;(continue是跳出此次循环)
3.如果不正常,也会发送一个URL故障的邮件通知,且会生成一个失败的临时文件,后面通过判断这个文件是否存来判断是否还需要发送邮件,避免无休止发送邮件告警,且会把成功的临时文件删除;
总的来说就是开关原理,通过判断临时文件是否存在来判断是否需要发送邮件,避免无休止发送告警。
测试查看执行判断的过程
sh -x checkweb.sh

通过shell监控网页是否正常,然后促发邮件告警的更多相关文章

  1. 监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

    zzx@zzx:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警.    前提安装mail服务nh=`uname -r ...

  2. shell监控脚本

    序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...

  3. linux性能监控 + Sendmail 发邮件

    sendmail安装 #!/bin/bash#控制发邮件的阈值是在rate,rate1和FF值(三个同样的用途,仅仅是名字不同)##注:该博文中的变量不规范,我是随意定义的,请注意##定义时间倒计时函 ...

  4. curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,

    cURL > Docs > Tutorial:  http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...

  5. shell监控网站是否自动运行并自动重启【原创】

    shell监控网站是否自动运行并自动重启 #!/bin/bash -T www.baidu.com ];then echo "`date` 网站访问正常!" >> /r ...

  6. Linux/Unix shell 监控Oracle监听器(monitor listener)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  7. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  8. shell 监控磁盘使用率【转】

    方案一: disks=(`df |sed 1d | awk '{print $1,$5}'|tr -d %`) len=${#disks[@]} ;i<=$len;i=i+));do ];the ...

  9. 利用shell监控cpu、磁盘、内存使用率

    利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...

随机推荐

  1. Windows监控——性能指标详解(转)

    http://blog.csdn.net/yiqin3399/article/details/51730106

  2. properties文件的加载方式

    下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点: 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStr ...

  3. Java学习之==>int和Integer的区别和联系

    一.区别 1.类型 int是java中原始八种基本数据类型之一: Integer是一个类,包装整型提供了很多日常的操作: 2.存储位置和大小 int是由jvm底层提供,由Java虚拟机规范,int型数 ...

  4. nginx启动用户和nginx工作用户要一致

    [root@bogon default]# ps aux | grep "nginx: worker process" | awk '{print $1}'rootrootroot ...

  5. What is an Activation object in JavaScript ?

    ********************* from Professional JavaScript for Web Development Execution Context And Scope T ...

  6. IDEA和VS快捷键对比

    IDEA和Visual Studio快捷键对比 VS     F5 F9            resume programe 恢复程序     Alt+F10       show executio ...

  7. 用edoc2实现上传和下载

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.apache.http.Htt ...

  8. 查找两个有序数组中的第K个元素(find kth smallest element in 2 sorted arrays)

    查找两个有序数组中的第K个元素 int FindKth(int a[], int b[], int k, int astart, int aend, int bstart, int bend) { ; ...

  9. echarts 饼图-->如何修改legend模板?

    首先需要在初始化图表的方法中过滤一下数据 ,将你需要的 名称  所占百分比 所占数量  筛选出来 let dataFilter = [ { value: 20, name: "未知" ...

  10. Xcode增加头文件搜索路径的方法

    Xcode增加头文件搜索路径的方法 以C++工程为例: 在Build Settings 页面中的Search Paths一节就是用来设置头文件路径. 相关的配置项用红框框起来了,共有三个配置项: He ...