- 概述
监控网站url是否正常最常见的命令无非就是wget和curl两个命令了。
- wget命令
wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
wget命令的参数在运维工作中常用的如下:
-h #显示指令帮助信息
-nc #文件存在时,下载文件不覆盖原有文件
-nv #下载时只显示更新和出错信息,不显示指令的详细执行过程
-nh #不查询主机名称
--spider #模拟爬虫的行为去访问网站,但不会下载网页
-q, --quiet #安静的访问,禁止输出,类似-o /dev/null功能
-v, --verso #显示详细执行过程
-o, --output-file 文件名 #记录输出到文件
-T, --timeout 秒数 #访问网站的超时时间(秒)
-t, --tries 次数 #当网站异常时重试网站的次数
- curl命令
curl命令在运维工作中常用的参数也并不多,常见的如下:
-I, --head #显示响应头信息
-m, --max-time 秒数 #访问超时的时间(秒)
-o, --output 文件名 #记录访问信息到文件
-s, --silent #沉默模式访问,就是不输出信息
-w, --write-out 固定特殊的格式 #以固定特殊的格式输出,例如:%{http_code},输出状态码
- 实际监控方法如下:
1、利用curl命令返回值确定网站是否正常
[root@myhost ~]# curl -s -o /dev/null www.baidu.com
[root@myhost ~]# echo $?
0
2、获取命令执行后的状态码(200表示正常)
[root@oldboy ~]# curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null www.baidu.com
200
3、开发监控制定url短信报警脚本
shell脚本1:
[root@myhost script]# cat check_url.sh
#!/bin/sh
#created by yuki on 20170725
#this script is used to monitor if we can ping the two urls below successfully or not.
#假设公司的电信的网络ip为220.182.2.78;移动网络ip为:192.168.2.42
url1="http://220.182.2.78/security.shtml"
url2="http://192.168.2.42/security.shtml"
checkurl(){
curl -I -m 20 -s -w "%{http_code}\n" -o /dev/null $1
echo $?
status_code=`curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null $1 `
if [ $? -eq 0 ]
then
echo "$1 is ok"
echo "$status_code"
else
echo "$1 is fail"
echo "$status_code"
/usr/bin/python2.7 /home/script/sendSMS.py $1 $status_code #当url异常时调用python脚本给监控人发送报警短信
fi
}
main(){
checkurl $1
checkurl $2
}
main $url1 $url2
[root@myhost script]#
python脚本2:短信报警接口
#!/usr/bin/python
#coding:utf-8
import urllib, json, sys
def main():
appkey = '39bxxxxxxxxxxxxxxxxxxe17bb' #您申请的短信服务appkey
mobile_arr = ['157xxxxxx','187xxxxxxxx'] #短信接受者的手机号码
tpl_id = '63917' #申请的短信模板ID,根据实际情况修改
#tpl_value = '#code#=5678&#company#=JuheData' #短信模板变量,根据实际情况修改
problem=sys.argv[1]
status_code=sys.argv[2]
tpl_value = '#code#=5678&#msg#='+'异常:'+problem+'状态码:'+status_code
print(tpl_value)
mobile=''
sendsms(appkey, mobile, tpl_id, tpl_value) #请求发送短信
def sendsms(appkey, mobile, tpl_id, tpl_value):
sendurl = 'http://v.juhe.cn/sms/send' #短信发送的URL,无需修改
mobile_arr = ['157xxxxxx','187xxxxxxxx'] #短信接受者的手机号码
for mobile in mobile_arr:
params = 'key=%s&mobile=%s&tpl_id=%s&tpl_value=%s' % \
(appkey, mobile, tpl_id, urllib.quote(tpl_value)) #组合参数
wp =urllib.urlopen(sendurl+"?"+params)
content = wp.read() #获取接口返回内容
result = json.loads(content)
if result:
error_code = result['error_code']
if error_code == 0:
#发送成功
smsid = result['result']['sid']
print "sendsms success,smsid: %s" % (smsid)
else:
#发送失败
print "sendsms error :(%s) %s" % (error_code, result['reason'])
else:
#请求失败
print "request sendsms error"
if __name__ == '__main__':
main()