python

超轻量级php框架startmvc

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

更新时间:2020-06-07 10:12:01 作者:startmvc
前言:最近我们的升级服务器有点不太稳定,经常崩溃掉。然后客户连接不上,跟我们反馈

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

目标: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 监控服务