教你如何监控网站URL是否正常

监控网站URL是否正常最常见的方法莫过于wget和curl命令了,这两个命令都是非常强大的,强大到网友查看帮助都无从选择的地步了。

1.1 wget命令

wget命令的参数非常多,至少也有数十个, 但是运维工作中常用的并不多,老男孩老师把最有用的列表如下。

wget命令

下载网页或文件

--spider

模拟爬虫的行为去访问网站,但不会下载网页

-q, --quiet

安静的访问,禁止输出,类似-o /dev/null功能

-o, --output-file=FILE

记录输出到文件

-T, --timeout=SECONDS

访问网站的超时时间

-t, --tries=NUMBER

当网站异常时重试网站的次数

实际监控方法如下:利用wget命令返回值确定网站是否正常

[root@oldboy ~]# wget --spider -T 5 -q -t 2 www.oldboyedu.com

[root@oldboy ~]# echo $? #<==利用返回值确定网站是否正常。

0

1.2 curl命令

curl命令的参数比wget的参数还多,但运维中常用的参数也并不多,因此也是列表如下:

curl命令

访问网站url

-I/--head

显示响应头信息

-m/--max-time <seconds>

访问超时的时间

-o/--output <file>

记录访问信息到文件

-s/--silent

沉默模式访问,就是不输出信息

-w/--write-out <format>

以固定特殊的格式输出,例如:%{http_code},输出状态码

实际监控方法如下:

1、利用curl命令返回值确定网站是否正常

[root@oldboy ~]# curl -s -o /dev/null www.oldboyedu.com

[root@oldboy ~]# echo $?

0

2、获取命令执行后的状态码(200表示正常)

[root@oldboy ~]# curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null www.baidu.com

200

1.3 开发Shell脚本实现监控指定的URL是否正常

解答:

方法1:

#!/bin/sh

function usage() { #<==帮助函数

echo $"usage:$0 url"

exit 1

}

function check_url() { #<==检测URL函数。

wget --spider -q -o /dev/null --tries=1 -T 5 $1

#<==采用wget返回值方法,这里的$1就是函数传参。

#curl -s -o /dev/null $1 #<==采用curl返回值方法也是可以的。

if [ $? -eq 0 ]

then

echo "$1 is yes."

exit 0

else

echo "$1 is fail."

exit 1

fi

}

function main() { #<==主函数。

if [ $# -ne 1 ] #<==如果传入的多个参数,则打印帮助函数,提示用户。

then

usage

fi

check_url $1 #<==接收函数的传参,即把结尾的$*传到这里。

}

main $* #<==这里的$*就是把命令行接收的所有参数作为函数参数传给函数内部,常用手法。

实践结果:

[root@oldboy ~]# sh checkurl.sh www.oldboyedu.com

www.oldboyedu.com is ok

[root@oldboy ~]# sh checkurl.sh www.baidu.com

www.baidu.com is ok

[root@oldboy ~]# sh checkurl.sh 10.0.0.8

10.0.0.8 is fail

方法2:

[root@oldboy ~]# cat checkurl1.sh

#!/bin/bash

##############################################################

# File Name: checkurl.sh

# Version: V1.0

# Author: oldboy

# Organization: www.oldboyedu.com

# Created Time : 2018-06-07 18:29:19

##############################################################

usage(){

echo "Usage:$0 url"

exit 1

}

checkurl(){

local num=`curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null|grep 200|wc -l`

if [ $num -eq 1 ] #<==采用获取状态码,并转为数字的方式判断,如果301认为正确也可以加上egrep过滤。

then

echo "$1 is ok"

else

echo "$1 is fail"

fi

}

main(){

if [ $# -ne 1 ]

then

usage

fi

checkurl $1

}

main $*

实践结果:

[root@oldboy ~]# sh checkurl.sh www.oldboyedu.com

www.oldboyedu.com is ok

[root@oldboy ~]# sh checkurl.sh www.baidu.com

www.baidu.com is ok

[root@oldboy ~]# sh checkurl.sh 10.0.0.8

10.0.0.8 is fail

如果网友能读懂本文,相信以后再写监控网站URL的脚本就会很轻松了。

原文发布于微信公众号 - IT技术精选文摘(ITHK01)

原文发表时间:2018-06-14

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

nginx反向代理问题处理记录

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

Linux系统里让vim支持markdown格式的语法高亮

下面就来介绍如何设置使得markdown格式的文件在vim里也能享有语法高亮的待遇。

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

如何使用jMeter发送两个逻辑上相关的HTTP请求

在前一篇文章使用jMeter构造大量并发的随机HTTP请求里我通过jMeter构造了大量的HTTP GET并发请求,对服务器产生了大量读操作。

3576
来自专栏java一日一条

Java I/O底层是如何工作的?

本博文主要讨论I/O在底层是如何工作的。本文服务的读者,迫切希望了解Java I/O操作是在机器层面如何进行映射,以及应用运行时硬件都做了什么。假定你熟悉基本的...

644
来自专栏PhpZendo

使用 Laravel 制定 MySQL 数据库备份计划任务

你可以在终端里通过运行一行命令导出整个数据库。这种方案不仅简单直接而且有效。不过有更加自动化的解决方案。让我们来看看究竟是什么!

771
来自专栏全华班

“码码”再也不用担心我的代码被反编译了!

自己辛辛苦苦写出来的代码,被别人无情的反编译了怎么办? ? 一、背景 Java是一种跨平台的、解释型语言,Java源代码编译成中间“字节码”存储...

3506
来自专栏小蠢驴iOS专题

iOS之手把手教你学会使用sqlite,并应用于实际开发

1183
来自专栏

使用redis构建可靠分布式锁

关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了。 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下...

2497
来自专栏Crossin的编程教室

【Python 第32课】 写文件

来而不往,非礼也。有读,就要有写。 和把大象关进冰箱一样,写文件也需要三步: 打开文件; 把内容写入文件; 关闭文件。 打开文件我们昨天已经讲过。但python...

2554
来自专栏Python中文社区

开车啦!小爬虫抓取今日头条街拍美女图

專 欄 ❈追梦人物,电子科技大学计算机学院研究生,从事大数据分析研究方向。主要使用 Python 语言进行相关数据的分析,熟练使用 django 开发网站系统...

2575

扫码关注云+社区