Shell编程---监控url并短信报警

  • 概述

监控网站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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值