【Python案例】(六)schdule模块的使用——页面监测(需补充schdule模块如何使用讲释)

【Python案例】(六)schdule模块的使用——页面监测(需补充schdule模块如何使用讲释),第1张

文章目录
  • 一、需求来源
  • 二、步骤拆解
  • 三、程序细节

一、需求来源

公司官网因为服务器崩溃而打不开了,于是我想做一个实时监测系统,定期给服务器发送请求,看网站是否运行正常。

二、步骤拆解
  1. 构建网页请求,返回200表示正常。
  2. 设置定期(1个小时)邮件提醒,告知服务器仍正常运行。
  3. 如果网页请求连续三次出现错误,将发送邮件至邮箱,提醒用户网页崩溃了
三、程序细节

具体schdule相关代码在32和37行

send_mail="xxx@126.com"
send_mail_passwd="xxx"
receive_mail = ["xxx@xxx.com.cn","xxxx@qq.com","xxx@163.com"]
send_mail_server = 'smtp.126.com'

def send_warningmail():

    mail_to = smtplib.SMTP(send_mail_server,25)
    mail_to.login(send_mail,send_mail_passwd)
    msg = MIMEText(f'{datetime.now().strftime("%H:%M:%S")}服务器崩溃了!!','plain','utf-8')
    msg["from"] = send_mail
    msg["to"] = receive_mail
    msg['Subject'] = Header('服务器崩溃了!', 'utf-8')
    mail_to.sendmail(send_mail,receive_mail,msg.as_string())
    mail_to.close()

def send_functionalmail():

    mail_to = smtplib.SMTP(send_mail_server,25)
    mail_to.login(send_mail,send_mail_passwd)
    msg = MIMEText(f'{datetime.now().strftime("%H:%M:%S")}服务器正常运行!','plain','utf-8')
    msg["from"] = send_mail
    msg["to"] = ','.join(receive_mail)
    msg['Subject'] = Header('服务器运行正常', 'utf-8')
    mail_to.sendmail(send_mail,receive_mail,msg.as_string())
    mail_to.close()

    


if __name__ == '__main__':
   schedule.every(1).hours.do(send_functionalmail)
   logs=open('./logs.txt','a+')
   logs.writelines(['\n',str(datetime.now()),'    程序正在运行'])
   logs.close()
   while 1:
       schedule.run_pending()
       count=0
       error_status_count=0
       while count<3:
           time.sleep(70)      #每隔70秒监控一次服务器
           try:
               status=urlopen("http://share.183read.cc/article/4305781/1.html?t=1648794248").code   #收集监控网址的网页状态码
               if status==200:
                   logs=open('./logs.txt','a+')
                   logs.writelines(['\n',str(datetime.now()),'    服务器正常运行'])
                   logs.close()                    
               if status!=200:
                   error_status_count+=1
                   logs=open('./logs.txt','a+')
                   logs.writelines(['\n',str(datetime.now()),'    服务器出现问题,错误状态码出现次数:',str(error_status_count),'    错误代码:',str(status)])
                   logs.close()
           except:
               error_status_count+=1    #网页状态错误次数进行累加
               logs=open('./logs.txt','a+')
               logs.writelines(['\n',str(datetime.now()),'    服务器已经崩溃,崩溃次数:',str(error_status_count)])
               logs.close()
           count+=1
       if error_status_count>=3: #网页状态错误超过3次自动发送报警邮件
           logs=open('./logs.txt','a+')
           logs.writelines(['\n','错误状态码:',str(error_status_count),'    已经发送预警邮件,程序将会在半个小时候后继续运行!!'])
           logs.close()
           # showwarning('attention',['webserver is down!',str(datetime.now())])  #d出对话框提示服务器崩溃
           send_warningmail()
           time.sleep(1800)      #邮件发送后半小时再后再次监控网页

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/787225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存