新系統上線,經常出現業務資料問題,需要定期比對資料的準確性,於是考慮用python寫監控指令碼,定時檢查資料準確性。
專案是java開發的,為什麼用python寫呢。主要考慮還是執行方便,主專案不可能隨意啟停,那就只能另寫一套輔助程式碼,java專案需要打包上傳,每次修改都需要重複打包,指令碼的作用註定了修改的頻率高,考慮功能不多,只是單執行緒比較資料,python比java更適合作為解決方案。
使用技術:
pymysql
- python
呼叫mysql資料庫
smtp
-
傳送告警郵件
crontab
- linux
定時執行工具
pymysql查詢資料庫
連線資料庫、關閉資料庫
db = pymysql。connect(host=host, user=user, passwd=passwd, db=db_name)
cursor = db。cursor()
#執行程式碼
cursor。close()
db。close()
pymysql操作資料庫依靠sql語句執行,正則表示式新增引數:
cursor。execute(‘select name, age from student where age > %s’, 16)
result = cursor。fetchone() # 逐條獲取查詢結果
result = cursor。fetchall() # 一次性獲取查詢結果列表
smtp傳送郵件
使用smtp傳送郵件,需要開通郵箱的smtp功能,以QQ郵箱為例(網易郵箱比較坑,容易限制傳送,QQ郵箱測試結果比較好)。
import smtplib
from email。mime。text import MIMEText
host = ‘smtp。qq。com’
user = ‘xxxxx@qq。com’
passwd = ‘xxxxxxxxxx’
# 傳送郵件
def send(receivers=[‘xxxx@qq。com’,‘xxxxx@163。com’], header=‘標題’, text=‘郵件內容’):
try:
msg = MIMEText(text, ‘html’, ‘utf-8’)
msg[‘From’] = ‘測試郵件傳送’
msg[‘To’] = ‘, ’。join(receivers)
msg[‘Subject’] = header
sobj = smtplib。SMTP_SSL(host, 465)
sobj。login(user, passwd)
sobj。sendmail(user, receivers, msg。as_string())
except Exception as e:
print(‘郵件傳送異常’, e)
else:
sobj。quit()
crontab定時執行任務
在Linux伺服器定時執行,可以直接使用linux服務工具,比python一直在後臺執行要好用。
控制檯輸入:
crontab -e # 開啟定時任務編輯介面
定時任務規則:
0/5 7-9 * * * python python-file。py
表示每天上午7點到9點時間段,每5分鐘執行一次