- 一、需求来源
- 二、步骤拆解
- 三、程序细节
公司官网因为服务器崩溃而打不开了,于是我想做一个实时监测系统,定期给服务器发送请求,看网站是否运行正常。
二、步骤拆解- 构建网页请求,返回200表示正常。
- 设置定期(1个小时)邮件提醒,告知服务器仍正常运行。
- 如果网页请求连续三次出现错误,将发送邮件至邮箱,提醒用户网页崩溃了
具体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) #邮件发送后半小时再后再次监控网页
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)