您的位置:首页 > 编程语言 > Python开发

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

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

目标: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消失则发送邮件报告,设置延迟为半小时,避免一直重复发送邮件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: