Pythonはあるサービスを監視し、サービスがクラッシュしてメールを送信することを実現する.

2113 ワード

前言:最近、私たちのアップグレードサーバーは少し不安定で、よくクラッシュします.その後、お客様が接続できず、私たちにフィードバックしてから知りました.だから、このスクリプトを書く目的は、お客様よりもアップグレードサービスの運行状況を事前に知っておくためで、いったん崩壊したら、最初にログインして、サービスを開いて、お客様の苦情を避けることができます.
ターゲット: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=["[email protected]"] 
mail_host="smtp.qq.com"  #     
mail_user="1234"    #   
mail_pass="  "   #   
mail_postfix="qq.com"  #      
  
def send_mail(to_list,sub,content):  #to_list:   ;sub:  ;content:    
    me="       "+""   #   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         ,        ,