python實現自動監控網站並發送郵件警示

來源:互聯網
上載者:User

標籤:art   格式   斷網   預警   bsp   dex   data   發送郵件   主程   

原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://mapengfei.blog.51cto.com/1552412/1841731

 

通過定時執行python指令碼,可以實現定期批量訪問網站,如果發現網站打不開,第一時間發郵件到管理員郵箱進行預警

這裡用的是python3.5

需要安裝的外掛程式:

smtplib:發郵件需要用到

pycurl:訪問網站時會需要用到

linecache:在讀取txt網站清單時需要用到

 

具體思路:

python程式從txt裡面批量讀取到網站的資訊,通過Curl.py類比瀏覽器去訪問網站,並且把訪問的結果寫入到以自己的網站名稱-日期.txt格式的檔案中記錄;有幾種情況:

1、如果發現打不開了,直接發郵件提示網站已經打不開

2、發現可以開啟,讀取檔案中上一次訪問的情況(讀取txt檔案最後一行),

    1)如果發現上一次是打不開的,發寄件提醒網站已經恢複了

    2)如果發現上一次是打得開的(200的返回碼),只是記錄網站訪問的日誌就可以了

 

總共4個檔案,

Email.py是郵件類,主要用來發郵件的時候調用,這裡需要按照你的情況改成你的郵箱(msg[‘From‘]),郵箱伺服器位址(SMTP地址),和你的郵箱密碼(SMTP.login)

 

Email.py

#!/usr/bin/python#-*- coding:utf-8 -*-import sysimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartclass Email_send(object):    def __init__(self,msgTo,data2,Subject):        self.msgTo=msgTo        self.data2=data2        self.Subject=Subject    def sendEmail(self):       # (attachment,html) = content        msg = MIMEMultipart()        msg[‘Subject‘] = self.Subject        msg[‘From‘] = ‘[email protected]‘        msg[‘To‘] = self.msgTo        html_att = MIMEText(self.data2, ‘html‘, ‘utf-8‘)        #att = MIMEText(attachment, ‘plain‘, ‘utf-8‘)        msg.attach(html_att)        #msg.attach(att)        try:            smtp = smtplib.SMTP()            smtp.connect(‘smtp.xxxx.com‘, 25)            smtp.login(msg[‘From‘], ‘xxxx‘) #改成自己的郵箱密碼            smtp.sendmail(msg[‘From‘], msg[‘To‘].split(‘,‘), msg.as_string())            return(‘郵件發送成功‘)        except Exception as e:            print(‘--------------sss------‘,e)    def curl(self):        import pycurl        c=pycurl.Curl()        #url="www.luoan.com.cn"        #indexfile=open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")        c.setopt(c.URL,url)        c.setopt(c.VERBOSE,1)        c.setopt(c.ENCODING,"gzip")        #類比Firefox瀏覽器        c.setopt(c.USERAGENT,"Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0")        return c

Curl.py 主要用來執行類比瀏覽器訪問網站並返回結果的檔案

#!/usr/bin/python#-*- coding:utf-8 -*-import sysimport pycurlclass Curl(object):    def __init__(self,url):        self.url=url    def Curl_site(self):        c=pycurl.Curl()        #url="www.luoan.com.cn"        #indexfile=open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")        c.setopt(c.URL,self.url)        c.setopt(c.VERBOSE,1)        c.setopt(c.ENCODING,"gzip")        #類比Firefox瀏覽器        c.setopt(c.USERAGENT,"Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0")        return c

site_moniter.py 這個檔案為主程式,主要執行調用上面的函數,讀取txt檔案中的網站清單,如果網站打不開就發郵件出來警示

需要注意:1、把xx[email protected]改成你自己的郵箱,

      2、把檔案路徑改成自己的真實路徑

#!/usr/bin/python#-*- coding:utf-8 -*-import pycurlimport osimport sysimport linecacheimport time  #引入事件類別,用來擷取系統目前時間#from ceshi import Studentfrom Email import Email_sendfrom Curl import Curl#bart = Student(‘mafei‘,59)#bart.print_score()def script(urls,type):    msgTo = ‘[email protected]‘    now_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))    j=1#       data2=[{‘aa‘:‘aa‘}]    for url_split in urls:        #print(url_split)        url_1=url_split.split(‘---‘)        url=url_1[1]        recovery_title = "監控通知----%s url:%s" % (url_1[0], url) + "在" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) + "已經恢複"        down_title = "監控通知----%s url:%s" % (url_1[0], url) + "在" + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) + "無法開啟"        #print(‘~~~~~~~~~~~~~~~~~~~‘)        #print(url)        #引用爬去網站的類,調用結果        url_result = Curl(url)        c = url_result.Curl_site()        try:            c.perform()            code = str(c.getinfo(c.HTTP_CODE))            print(code+‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa‘)        except Exception as e:            print(‘--------錯誤資訊:--------‘,e)            #indexfile.close()            #c.close()        code = str(c.getinfo(c.HTTP_CODE))        # print(code+‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa‘)        filename = ‘%s-%s.txt‘ % (url_1[0], time.strftime("%Y-%m-%d", time.localtime(time.time())))        #判斷如果在網站無法開啟的情況下        if code == ‘0‘ or code==‘400‘ or code==‘500‘ or code==‘404‘:            resolveTime = 0            Connection_Time = 0            Transfer_Total_Time = 0            Total_Time = 0            # print(‘為000000000000000000000000000000000000000000‘)            data3 = ‘網站:%s無法開啟%s‘ % (url_1[0], url)            # indexfile.close()            # c.close()            #判斷網站如果掛了就發郵件            stat3 = Email_send(msgTo, data3, down_title)            resole=stat3.sendEmail()            print(resole)            print(data3 + ‘郵件已經發送‘)        else:            #resolveTime = str(c.getinfo(c.NAMELOOKUP_TIME) * 1000) + " ms"            # Connection_Time=str(float(c.getinfo(c.CONNECT_TIME)*1000-c.getinfo(c.NAMELOOKUP_TIME)*1000))+" ms"            #Connection_Time = str(c.getinfo(c.CONNECT_TIME) * 1000 - c.getinfo(c.NAMELOOKUP_TIME) * 1000) + " ms"            # Connection_Time=round(float(Connection_Time))            #Transfer_Total_Time = str(c.getinfo(c.TOTAL_TIME) * 1000 - c.getinfo(c.PRETRANSFER_TIME) * 1000) + " ms"            #Total_Time = str(c.getinfo(c.TOTAL_TIME) * 1000) + " ms"            # data2=data            # data={‘url‘:url,‘HTTP CODE‘:code,‘resolveTime‘:resolveTime,‘Connection_Time‘:Connection_Time,‘Transfer_Total_Time‘:Transfer_Total_Time,‘Total_Time‘:Total_Time}            print(‘網站可以正常開啟‘)            #f = open(filename, ‘a‘,encoding=‘utf-8‘)            file_exit=os.path.exists(filename)            #print(file_exit)            #判斷這個記錄檔存不存在            if(file_exit):                #讀取檔案最後一行,為了讀取出來最後一次的狀態值                file = open(filename, ‘r‘,encoding=‘utf-8‘)                linecount = len(file.readlines())                data = linecache.getline(filename, linecount)                file.close                if data == ‘‘:                    print(‘這是‘+data+‘為空白的資料‘)                else:                    print(‘其他資訊%s‘%(data))                    explode = data.split(‘----‘)                    #判斷如果讀取出來的值,最後一次是異常的情況就警示                    if explode[3]==‘0\n‘ or explode[3]==‘400\n‘ or explode[3]==‘500‘ or explode[3]==‘404‘:                        data3 = ‘網站:%s在%s已經恢複%s‘ % (url_1[0], now_time,url)                        stat3 = Email_send(msgTo, data3, recovery_title)                        resole = stat3.sendEmail()                        print(resole)                        print(data3 + ‘郵件已經發送‘)                    else:                        print(‘最後一次記錄為其他值:%s‘%(explode[3])+‘-----‘)            else:                print(‘檔案不存在‘)        data2 = ‘\n‘ + url_1[0] + ‘----‘ + url + ‘-----‘ + time.strftime("%H:%M:%S", time.localtime(time.time())) + ‘-------‘ + code        print(‘data2資料寫入成功:‘ + data2)        file = open(filename, ‘a‘, encoding=‘utf-8‘)        file.write(data2)        file.close#  bart = Student(data2,59)#  bart.print_score()if __name__ == "__main__":    type = "監控通知-測試" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))    data1=[‘公司入口網站---www.luoan.com.cn‘,‘公司平台---yun.luoan.com.cn‘]    #script(data1,type)  #中心層面的網站清單    file=open(‘D:\python\site_moniter\zhongxin.txt‘)    data2=[]    while 1:        line2 =file.readline()        print(line2)        if not line2:            break        data2.append(line2[0:-1])    #data2=[‘www.luoan.com.cn‘,‘yun.luoan.com.cn‘,‘www.qq.com‘]    print(data2)    title="監控通知-中心"+ time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))    script(data2,title)

本文出自 “馬鵬飛——著” 部落格,出處http://mapengfei.blog.51cto.com/1552412/1841731

python實現自動監控網站並發送郵件警示

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.