一段代碼讓你會Python連接MySQL數據庫和發郵件

一段代碼讓你會Python連接MySQL數據庫和發郵件

python

閒來無事寫段Python腳本監控下數據庫及查詢網站是否正常,有異常可以發郵件警報,每10分鐘自動檢查一次

# -*- coding: UTF-8 -*-

import requests

import sys, os, re, urllib, urlparse ,sched,time

import smtplib

import traceback

import MySQLdb

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from urllib import urlopen

#上數引入所需的相應庫

reload(sys)

sys.setdefaultencoding('gbk')

#郵件函數

def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):

mail_msg = MIMEMultipart()

if not isinstance(subject,unicode):

subject = unicode(subject, 'utf-8')

mail_msg['Subject'] = subject

mail_msg['From'] =fromaddr

mail_msg['To'] = ','.join(toaddrs)

mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))

try:

s = smtplib.SMTP()

s.connect(smtpaddr)

s.login(fromaddr,password)

s.sendmail(fromaddr, toaddrs, mail_msg.as_string())

s.quit()

except Exception,e:

print "Error: unable to send email"

print traceback.format_exc()

def huizong():

try:

conn = MySQLdb.connect(host='MySQL數據庫IP地址', port=端口號,user='用戶名',passwd='密碼',db='數據庫')

cur=conn.cursor()

count = cur.execute('select 某一字段名 from 表名 limit 1')

results = cur.fetchall()

cur.close()

conn.close()

mysqlshuju=1 #如果能連接上,則該變量為1

except Exception as e:

mysqlshuju=0 #如果連接出現異常,則該變量為0

if mysqlshuju==0:

shuju2="數據庫無法連接"

else:

shuju2="數據庫連接正常"

f = open('url.txt', 'r')#url.txt為需要檢查的網站的網址列表,格式需類似為http://www.baidu.com

url = f.readlines()

length = len(url)

url_result_success=[]

url_result_failed=[]

num = 0#定義一個num變量並初始化為0

for i in range(0,length):

try:

response = requests.get(url[i].strip(), verify=False, allow_redirects=True, timeout=5)

if response.status_code != 200:

#由於檢測的網站沒有重定向,所以只考慮200的狀態碼,如果有重定向還需要考慮301、302等狀態碼

raise requests.RequestException(u"Status code error: {}".format(response.status_code))

except requests.RequestException as e:

url_result_failed.append(url[i])

num=1#如果無法連接到網址,將num變為1

continue

url_result_success.append(url[i])

f.close()

result_len = len(url_result_success)

failed_len = len(url_result_failed)

if mysqlshuju==0 or num==1:

fromaddr = "發送的郵箱地址" #例如[email protected]

smtpaddr = "smtp.126.com" #這個是使用126郵箱的

toaddrs = ["填寫需要發送到的那個郵箱","填寫發送的郵箱地址"]

subject = "在線監控郵件" #郵件標題

password = "XXXXXXX" #這個密碼非郵箱登錄密碼,是開啟smpt的時候設置的那個授權密碼

msg=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))#獲取下當前的時間

for i in range(0,failed_len):#做循環,把監控到無法訪問的網址都列出來

msg += url_result_failed[i].strip()

msg+="網站無法訪問"

msg+=shuju2

sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

print shuju2.decode('UTF-8').encode('gbk')

else:

print shuju2.decode('UTF-8').encode('gbk')

print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

for i in range(0,result_len):

print 'URL %s' % url_result_success[i].strip()+' '' ''success'

for i in range(0,failed_len):

print 'URL %s' % url_result_failed[i].strip()+' '' ''failed'

schedule = sched.scheduler(time.time, time.sleep)

def execute_command(cmd, inc):

#os.system(cmd)

huizong()

#print '1'

schedule.enter(inc, 0, execute_command, (cmd, inc))

def main(cmd, inc=600): #這個是定時的時間,單位是秒,目前是設置10分鐘一次

schedule.enter(0, 0, execute_command, (cmd, inc))

schedule.run()

if __name__ == '__main__':

main("netstat -an", 600)

#print code

裡面的一些IP地址及賬號和密碼填寫下,就可以正常運行了

但是監控到網址無法訪問的時候只是那個點連接時候網站沒響應,有可能下一秒就又好使了,所以下次還得優化下能夠一段時間內平均下,就會好點。

一段代碼讓你會Python連接MySQL數據庫和發郵件

在控制檯中運行

一段代碼讓你會Python連接MySQL數據庫和發郵件

郵箱收到的警報郵件

相關推薦

推薦中...