您好,登錄后才能下訂單哦!
前言:最近我們的升級服務器有點不太穩定,經常崩潰掉。然后客戶連接不上,跟我們反饋才知道。所以寫這個腳本的目的就是為了比客戶提前知道升級服務的運行狀況,一旦崩潰掉,就能第一時間登錄上去,開啟服務,避免客戶投訴。
目標: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消失則發送郵件報告,設置延遲為半小時,避免一直重復發送郵件
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。