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


Posted in Python onJune 21, 2018

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

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

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

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

废话不多说直接上代码:

#-*- encoding:utf-8 -*- 
#!/usr/bin/env python 
# name IsOpen.py 
import os 
import socket 
import time 
import smtplib  
from email.mime.text import MIMEText 
 
mailto_list=["872766492@qq.com"]  
mail_host="smtp.qq.com" #设置服务器 
mail_user="1124794084"  #用户名 
mail_pass="密码"  #口令  
mail_postfix="qq.com" #发件箱的后缀 
  
def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容 
  me="升级服务器报告"+"<"+mail_user+"@"+mail_postfix+">"  #这里的hello可以任意设置,收到信后,将按照设置显示 
  msg = MIMEText(content,_subtype='html',_charset='gb2312')  #创建一个实例,这里设置为html格式邮件 
  msg['Subject'] = sub  #设置主题 
  msg['From'] = me  
  msg['To'] = ";".join(to_list)  
  try:  
    s = smtplib.SMTP()  
    s.connect(mail_host) #连接smtp服务器 
    s.login(mail_user,mail_pass) #登陆服务器 
    s.sendmail(me, to_list, msg.as_string()) #发送邮件 
    s.close()  
    return True  
  except Exception, e:  
    print str(e)  
    return False 
 
 
def IsOpen(ip,port,flag): 
  s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
  try: 
    s.connect((ip,int(port))) 
    s.shutdown(2) 
    print '%d is open' % port 
    return True 
  except: 
    print '%d is down' % port  
    return False 
   
if __name__ == '__main__': 
  while(1>0): 
    flag=1 
    IsOpen('127.0.0.1',9906) 
    time.sleep(60) 
    flag=IsOpen('127.0.0.1',9906) 
    print flag 
    if flag==False: 
      send_mail(mailto_list,"XX升级服务器监测异常","error") 
      time.sleep(1800) 
 
#设置一分钟监测一次,如果发现端口9906消失则发送邮件报告,设置延迟为半小时,避免一直重复发送邮件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
线程和进程的区别及Python代码实例
Feb 04 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
Python正则表达式常用函数总结
Jun 24 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
简单了解Python生成器是什么
Jul 02 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
python实现简易内存监控
Jun 21 #Python
Python实现的微信好友数据分析功能示例
Jun 21 #Python
python skimage 连通性区域检测方法
Jun 21 #Python
python3实现windows下同名进程监控
Jun 21 #Python
python检测主机的连通性并记录到文件的实例
Jun 21 #Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 #Python
python实现自动发送报警监控邮件
Jun 21 #Python
You might like
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
Python collections模块实例讲解
2014/04/07 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
python如何调用php文件中的函数详解
2020/12/29 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
上班迟到检讨书
2014/09/15 职场文书
农业生产宣传标语
2014/10/08 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫