Python实现端口监控与崩溃自动邮件告警脚本
本文介绍如何利用Python监控特定服务的端口状态,当服务崩溃导致端口关闭时,自动通过SMTP服务器发送报警邮件。脚本包含端口探测逻辑与邮件发送模块,支持自定义监测频率与延迟,旨在帮助运维人员提前发现服务异常并及时恢复,避免客户投诉。
前言:近期我们的升级服务器运行状态不够稳定,频繁出现崩溃现象。由于缺乏实时预警,往往是客户无法连接并反馈后,我们才得知服务中断。因此,编写此脚本的核心目的是建立比客户更早的服务状态感知机制,一旦检测到服务崩溃,即可第一时间登录服务器重启服务,从而有效避免客户投诉。
目标:使用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消失则发送邮件报告,设置延迟为半小时,避免一直重复发送邮件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









