本节内容:
shell脚本监控网站是否异常,如有异常就自动发邮件通知管理员。

脚本检测流程,如下:
1,检查网站返回的http_code是否等于200,如不是200视为异常。
2,检查网站的访问时间,超过MAXLOADTIME(10秒)视为异常。
3,发送通知电邮后,在/tmp/monitor_load.remark记录发送时间,在一小时内不重复发送,如一小时后则清空/tmp/monitor_load.remark。

代码:

#!/bin/bash
# site: www.jquerycn.cn
SITES=("http://web01.example.com" "http://web02.example.com") # 要监控的网站
NOTICE_EMAIL='me@example.com' # 管理员电邮
MAXLOADTIME=10 # 访问超时时间设置
REMARKFILE='/tmp/monitor_load.remark' # 记录时否发送过通知电邮,如发送过则一小时内不再发送
ISSEND=0 # 是否有发送电邮
EXPIRE=3600 # 每次发送电邮的间隔秒数
NOW=$(date +%s) if [ -f "$REMARKFILE" ] && [ -s "$REMARKFILE" ]; then
REMARK=$(cat $REMARKFILE) # 删除过期的电邮发送时间记录文件
if [ $(( $NOW - $REMARK )) -gt "$EXPIRE" ]; then
rm -f ${REMARKFILE}
REMARK=""
fi
else
REMARK=""
fi # 循环判断每个site
for site in ${SITES[*]}; do printf "start to load ${site}\n"
site_load_time=$(curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}" "${site}")
site_access=$(curl -o /dev/null -s -w %{http_code} "${site}")
time_total=${site_load_time##*:} printf "$(date '+%Y-%m-%d %H:%M:%S')\n"
printf "site load time\n${site_load_time}\n"
printf "site access:${site_access}\n\n" # not send
if [ "$REMARK" = "" ]; then
# check access
if [ "$time_total" = "0.000" ] || [ "$site_access" != "200" ]; then
echo "Subject: ${site} can access $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
ISSEND=1
else
# check load time
if [ "${time_total%%.*}" -ge ${MAXLOADTIME} ]; then
echo "Subject: ${site} load time total:${time_total} $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
ISSEND=1
fi
fi
fi done # 发送电邮后记录发送时间
if [ "$ISSEND" = "1" ]; then
echo "$(date +%s)" > $REMARKFILE
fi
exit 0

监控网站是否异常的shell脚本的更多相关文章

  1. 8个DBA最常用的监控Oracle数据库的常用shell脚本

    本文介绍了8个常用的监控数据shell脚本.首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本.网上也有好多类似的文章,但基本上都不能正常运行,花点时间重 ...

  2. 自动监控主从MySQL同步的SHELL脚本

    代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LI ...

  3. 分享一个linux中测试网站是否正常的shell脚本

    #! /bin/bash #Author=Harry CheckUrl() { #<==定义函数,名字为CheckUrl timeout=5 #<==定义wget访问的超时时间,超时就退出 ...

  4. 监控CPU状况并发送邮件shell脚本

    #!/bin/bash #监控CPU状况并发送邮件 DATE=$(date +%y%m%d) TEMP=$(mktemp tmp.XXX.txt) cat /proc/cpuinfo >$TEM ...

  5. 监控Linux服务器网站状态的SHELL脚本

    1,监控httpd状态码的shell脚本代码. #!/bin/sh #site: www.jquerycn.cn # website[0]=www.jquerycn.cn/chuzu/' #网站1 m ...

  6. 用 shell 脚本做 restful api 接口监控

    问题的提出 基于历史原因,公司有一个"三无"采集服务--无人员.无运维.无监控--有能力做的部门不想接.接了的部门没能力.于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数 ...

  7. Linux/Unix shell 脚本监控磁盘可用空间

    Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考. 1.监控磁盘的空闲空间shell脚本 robi ...

  8. 常用shell脚本

    [脚本1]打印形状打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please input the length: " n ...

  9. 【转】干货分享-100个shell脚本

    本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please i ...

随机推荐

  1. docker容器命令(一)

    容器命令 创建容器:docker run 参数: -it 交互 -d 后台 –name 容器名 -p 主机端口:容器端口 (主机端口映射到docker端口) docker run --name cen ...

  2. xmind 文件 打开后会在当前目录生成 configuration,p2和workspace目录,artifacts.xml文件 解决

    在xmind安装目录下的xmind.ini修改如下配置,为绝对路径

  3. ant生成jmeter测试报告没有数据【已解决】

    1.如下图,在配置build时,到网上找配置文件,配置样式表文件名经常是jmeter-results-detail-report_21.xsl, 3.但是在其他版本可能被不是这个文件名,在jmeter ...

  4. [python]Appium+python +pytest 实现APP自动化,基于安卓

    1.安卓环境搭建 &关于app自动化,个人觉得安装过程比较复杂,脚本难度实现和web自动化差不多封装关键字即可,因此,下面会写安装.启动APP以及过程中遇到的一些坑(这一篇偏向解释给个人) & ...

  5. Unity——技能系统(二)

    Unity技能系统(二) Unity技能系统(一) Demo展示: 五.技能管理和释放 1.CharacterSkillSystem 技能系统类,给外部(技能按钮,按键)提供技能释放方法: 技能释放逻 ...

  6. Java中禁止浏览器开启缓存的方法命令

    响应头里添加禁止浏览器缓存的内容 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 其中,C ...

  7. MySQL基础语句(查询)

    students表 id class_id name gender score 1 1 小明 M 90 2 1 小红 F 95 3 1 小军 M 88 4 1 小米 F 73 5 2 小白 F 81 ...

  8. IDEA Plugin,写一个看股票指数和K线的插件

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 没招了,不写点刺激的,你总是不好好看! 以前,我不懂.写的技术就是技术内容,写的场景 ...

  9. [hdu7097]Just a Data Structure Problem

    (四边形不等式的套路题) 对于某一组$a_{i}$,显然可以区间dp,设$f_{l,r}$表示区间$[l,r]$​的答案,则转移即$$f_{l,r}=\begin{cases}0&(l=r)\ ...

  10. [bzoj1982]Moving Pebbles

    首先发现当n堆石子可以两两配对时,后手必胜,因为后手可以模仿先手那么当n堆石子不能两两配对时,先手必胜,因为先手可以做到让其两两配对,然后即先手必胜 这个东西用map维护即可 1 #include&l ...