文档章节

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

rootliu
 rootliu
发布于 2017/05/17 14:02
字数 497
阅读 87
收藏 0

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

目标: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=["872766492@qq.com"]   
  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消失则发送邮件报告,设置延迟为半小时,避免一直重复发送邮件  

本文转载自:http://blog.csdn.net/qq1124794084/article/details/50535401

rootliu
粉丝 6
博文 404
码字总数 2796
作品 0
海淀
数据库管理员
私信 提问
svn提交时,邮件通知问题解决的经验谈

svn可以实现在commit提交时,使用hook钩子功能,向指定的邮箱发送提交注释comment/log及内容变化的邮件,以方便对之进行监控。 具体的描述就是, 1.当某个账号提交代码/文档时,使用钩子功能...

gaolu
2015/01/27
1K
0
利用superlance监控supervisor运行状态

此文已由作者张家裕授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 最近开发问到supervisor管理下的进程重启了,有无办法做到主动通知,楼主最先想到的是supervi...

网易云
2018/11/06
0
0
Python 发送 email 的三种方式

Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法 本文原文自米扑博客:Python 发送 email 的三种方式 Python发送email比较简单,可以通...

sunboy2050
2018/10/18
72
0
(转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程。以...

linux超
2018/07/19
0
0
添加自定义监控项目、配置邮件警告

添加自定义监控项目 需求:监控某台wev的80端口连接数,并出图 两步:(1)zabbix监控弄中心创建监控项目;(2)针对该监控项目以图形展现 服务端ip:192.168.159.131 客户端ip:192.168.159...

豆渣锅
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
39分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
14
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部