侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Python实现监控某个服务,服务崩溃发送邮件报告

2023-11-10 星期五 / 0 评论 / 0 点赞 / 30 阅读 / 5566 字

前言:最近我们的升级服务器有点不太稳定,经常崩溃掉。然后客户连接不上,跟我们反馈才知道。所以写这个脚本的目的就是为了比客户提前知道升级服务的运行状况,一旦崩溃掉,就能第一时间登录上去,开启服务,避免客

前言:最近我们的升级服务器有点不太稳定,经常崩溃掉。然后客户连接不上,跟我们反馈才知道。所以写这个脚本的目的就是为了比客户提前知道升级服务的运行状况,一旦崩溃掉,就能第一时间登录上去,开启服务,避免客户投诉。

目标:Python实现监控某个服务,服务崩溃发送邮件报告。

原理:服务对应着端口,服务关闭的时候端口也会关闭。所以可以简化为监控某个端口,端口关闭发送邮件报告

方法:需要用到简单邮件服务器和端口探测的方法

废话不多说直接上代码:

 

[html] view plain copy

 

  1. #-*- encoding:utf-8 -*-  
  2. #!/usr/bin/env python  
  3. # name IsOpen.py  
  4. import os  
  5. import socket  
  6. import time  
  7. import smtplib    
  8. from email.mime.text import MIMEText  
  9.   
  10. mailto_list=["[email protected]"]   
  11. mail_host="smtp.qq.com"  #设置服务器  
  12. mail_user="1124794084"    #用户名  
  13. mail_pass="密码"   #口令   
  14. mail_postfix="qq.com"  #发件箱的后缀  
  15.     
  16. def send_mail(to_list,sub,content):  #to_list:收件人;sub:主题;content:邮件内容  
  17.     me="升级服务器报告"+"<"+mail_user+"@"+mail_postfix+">"   #这里的hello可以任意设置,收到信后,将按照设置显示  
  18.     msg = MIMEText(content,_subtype='html',_charset='gb2312')    #创建一个实例,这里设置为html格式邮件  
  19.     msg['Subject'] = sub    #设置主题  
  20.     msg['From'] = me    
  21.     msg['To'] = ";".join(to_list)    
  22.     try:    
  23.         s = smtplib.SMTP()    
  24.         s.connect(mail_host)  #连接smtp服务器  
  25.         s.login(mail_user,mail_pass)  #登陆服务器  
  26.         s.sendmail(me, to_list, msg.as_string())  #发送邮件  
  27.         s.close()    
  28.         return True    
  29.     except Exception, e:    
  30.         print str(e)    
  31.         return False  
  32.   
  33.   
  34. def IsOpen(ip,port,flag):  
  35.     s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
  36.     try:  
  37.         s.connect((ip,int(port)))  
  38.         s.shutdown(2)  
  39.         print '%d is open' % port  
  40.         return True  
  41.     except:  
  42.         print '%d is down' % port    
  43.         return False  
  44.       
  45. if __name__ == '__main__':  
  46.     while(1>0):  
  47.         flag=1  
  48.         IsOpen('127.0.0.1',9906)  
  49.         time.sleep(60)  
  50.         flag=IsOpen('127.0.0.1',9906)  
  51.         print flag  
  52.         if flag==False:  
  53.             send_mail(mailto_list,"XX升级服务器监测异常","error")  
  54.             time.sleep(1800)  
  55.   
  56. #设置一分钟监测一次,如果发现端口9906消失则发送邮件报告,设置延迟为半小时,避免一直重复发送邮件  

广告 广告

评论区