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短信报警脚本

[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]#
[root@myhost script]# cat sendSMS.py 
#!/usr/bin/python
import urllib, json, sys    #导包
def main():
        appkey = '39b4aa988bdc9f7b68267974d7ee17bb'         #您申请的短信服务appkey
        mobile_arr = ['159xxxxxxxx','187xxxxxxxxx']             #短信接受者的手机号码
        tpl_id = '63917'                            #申请的短信模板ID,根据实际情况修改 
    problem=sys.argv[1]                         #执行python脚本时命令行传来的第一个参数
        status_code=sys.argv[2]                     #执行python脚本时命令行传来的第二个参数
        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 = ['159xxxxxxxxx','187xxxxxxxxx']            #短信接受者的手机号码
        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()
[root@myhost script]#

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/75912062
今日推荐