Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情。但是逐一打开检查那简直是一件太糟心的事情了。所以,我想写一个 shell 脚本来实现对若干网站进行批量状态查询的脚本。

原理没什么要解释的,就是使用 curl -I 对网站的状态码进行查询。轮着查就是了。

文件准备

在要执行的脚本文件夹下面创建两个文件和一个文件夹,分别是

文件、文件夹 说明
./watch.sh 我们的批量查询脚本文件
./siteList.txt 我们的域名列表文件
./log/ 存放日志的文件夹

当然,你不需要完全按照我的设计来,但是需要知道一一对应的知道文件关系。

siteList.txt 文件内容

www.youtube.com
www.google.com
www.xxx.com
www.baidu.com
www.sina.com.cn
www.weibo.com
www.sohu.com
www.renren.com

如上的域名列表,一行一个,把你的网站全写进去即可。

实现 shell 脚本

logfile='./log/webSite-Status-'`date '+%Y%m%d'`'.log'
#touch $logfile
echo '--- watch web site by Fungleo ---' >> $logfile
echo '--- Web:blog.csdn.net/fungleo ---' >> $logfile
echo '--- Begin '`date '+%Y-%m-%d %H:%M:%S'`' ---' >> $logfile

sitelist=siteList.txt

i=0
l=$(wc -l $sitelist | sed 's/^[ \t]*//g' | cut -d ' ' -f1)
while read url; do
  # 进度百分比
  echo -en "\b\b\b\b"`echo $i*100/$l | bc `'%'
  ((i++))
  # 运行内容
  #result=$(curl --connect-timeout 3 -sI $url )
  result=$(curl --connect-timeout 3 -sL -D- $url -o /dev/null)
  curl_status=$?
  if [[ $curl_status -eq 0 ]]; then
    status=$(echo $result | grep HTTP | cut -d ' ' -f2)
  else
    status='die'
  fi
  echo 'status:'$status' | curl status:'$curl_status' | site:'$url  >> $logfile
done < $sitelist;

echo -e '--- End '`date '+%Y-%m-%d %H:%M:%S'`' ---\n' >> $logfile
echo -e '\b\b\b\bOK     '

解释原理

  1. 根据当前时间创建一个日志文件,存放在 ./log/ 文件夹下
  2. 输出开头的一些内容,可以自行调整
  3. 获取域名列表文件并存放到变量
  4. 计算进度百分比内容,更多参考 Shell 循环中实现展示进度百分比的脚本方法
  5. curl 去查状态码,超过3秒就认为是失败了。时间可以自定义。
  6. 根据执行结果判断是否正常,正常就返回正常的HTTP状态码,否则输出die
  7. 将执行结果输出到日志文件
  8. 打印完成时间
  9. 在终端标准输出 ok 表示脚本执行完成。

后续

在 curl -I www.qq.com 的时候,长时间没有响应,不知道为什么。可能是QQ网站禁止这样查询。但如何跳过不知道怎么解决,我是设定了超出时间的。比较奇怪,有知道的朋友告诉我一下。

上网查了一下相关资料,将 result=$(curl --connect-timeout 3 -sI $url ) 更换为 result=$(curl --connect-timeout 3 -sL -D- $url -o /dev/null) 就解决了查 www.qq.com 会停止响应的问题。因为有一些网站会屏蔽掉 head 查询。

算解决了。你有更好的方法吗?

在 MAC 下,这个脚本用 sh watch.sh 执行会轻微出错,必须用 bash watch.sh 执行。

或 chmod +x ./watch.sh 赋予执行权限后 ./watch.sh 执行。

以上脚本均在 mac 下测试通过,在 Linux 下可能会有稍许不同。

本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。

Shell 命令行,实现对若干网站状态批量查询是否正常的脚本的更多相关文章

  1. Shell 命令行统计 apache 网站日志访问IP以及IP归属地

    Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...

  2. 7个基于Linux命令行的文件下载和网站浏览工具

    7个基于Linux命令行的文件下载和网站浏览工具 时间:2015-06-01 09:36来源:linux.cn 编辑:linux.cn 点击: 2282 次 Linux命令行是GNU/Linux中最神 ...

  3. 自学Linux Shell2.1-进入shell命令行

    点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...

  4. Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

    Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来.但是下载什么站点我确不知道.今天尝试了一下利用 curl ...

  5. Python 分页和shell命令行模式

    前言 除了手动添加你的文章后外,你还可以用命令行来添加,python 自带了一种命令行 就是 shell 快速添加博文:Shell命令行模式 在你的目录下:mysite python manage.p ...

  6. 几种在shell命令行中过滤adb logcat输出的方法

    我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adblog ...

  7. Hadoop HDFS的shell(命令行客户端)操作实例

    HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls                  功能:显示目录信息 示例: hadoop fs ...

  8. 〖Linux〗使用命令行切换触摸板的状态on/off/toggle

    最近发现在Ubuntu13.10中使用Fn+F9对触摸板的控制操作不灵了: 并且在黑夜.外置键盘时,按下这个组合键也很不方便,由此便想到使用命令行来切换触摸板状态: 脚本:~/bin/touchpad ...

  9. Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

    Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...

随机推荐

  1. ubuntu文字界面与图形界面切换

    redhat: (据说是) 图形界面->文字界面:crtl+alt+F1~6 文字界面->图形界面:crtl+alt+F7 -------------------------------- ...

  2. bzoj 3545: [ONTAK2010]Peaks

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1124  Solved: 304[Submit][Status][Discuss] Descripti ...

  3. Python Matplotlib简易教程【转】

    本文转载自:https://blog.csdn.net/Notzuonotdied/article/details/77876080 详情请见:Matplotlib python 数据可视化神器 简单 ...

  4. SpringBoot 集成Netty实现UDP Server

    注:ApplicationRunner 接口是在容器启动成功后的最后一步回调(类似开机自启动). UDPServer package com.vmware.vCenterEvent.netty; im ...

  5. Mybatis实现批量删除

    知识点:当传入参数为数组时,XX.xml文件中,标签为collection属性 参考博客:https://blog.csdn.net/javaee_sunny/article/details/5251 ...

  6. spring boot 集成kafka (多线程,消费者使用kafka的原生api实现,因为@KakfkaListener修改groupId无效)

    application-test.properties #kafka kafka.consumer.zookeeper.connect=*:2181 kafka.consumer.servers=*: ...

  7. Chrome好用的插件:WhatRuns 查看网站使用的技术

    Chrome好用的插件:WhatRuns 查看网站使用的技术 这是一款免费的Chrome扩展程序,使用很简单. chrome安装这个插件之后,打开要检测的网站,然后点击WhatRuns 的图标,就开始 ...

  8. Select级联菜单,用Ajax获取Json绑定下拉框(jQuery)

    需求类似这样  ↓ ↓ ↓   -->    菜单A发生变化,动态取数据填充下拉菜单B. JS代码如下: <script type="text/javascript"& ...

  9. [小问题笔记(六)] 解决JS已执行,输出内容乱码问题. 顺带总结编码相关知识

    问题: JS输出的内容出现了乱码.如图: 分析:既然年和月的数字可以正常显示,证明js加载和执行都没有问题 解决:把js引用处的编码方式改成当前页面编码一致.charset="gb2312& ...

  10. javascript脚本程序执行消耗的时间

    console.time方法是开始计算时间,console.timeEnd是停止计时 // 启动计时器 console.time('time'); // (写一些测试用代码) // 停止计时,输出时间 ...