代碼如下:
#!/bin/bash
#author:吳青聰
#email:wuqingcong@aliyun.com
#encoding: utf-8
#聲明四個(gè)數(shù)據(jù),存放數(shù)據(jù)庫(kù)信息 ip、用戶、密碼、端口
declare -a host
declare -a user
declare -a passwd
declare -a port
#定義一個(gè)計(jì)數(shù)變量,初始值 0
n=0
#指明收件郵箱
mail=wuqingcong@aliyun.com
#按行讀取記錄了數(shù)據(jù)地址端口用戶名密碼信息的文件,存放進(jìn)對(duì)應(yīng)數(shù)組,此處文件為mysqldb_message.txt,其格式如下:
#host:192.168.0.32 user:test passwd:123456 port:3306 注意行首無(wú)空格
while read line
do
eval $(echo $line | awk -F"[: ]" '{printf("host[$n]=%s; user[$n]=%s; passwd[$n]=%s; port[$n]=%s",$2,$4,$6,$8)}')
let n++
done < mysqldb_message.txt
#檢測(cè)數(shù)據(jù)庫(kù)服務(wù)
let n–
for i in $(seq 0 $n);do
# 檢測(cè)命令
mysql -h${host[$i]} -u${user[$i]} -p${passwd[$i]} -P${port[$i]} -e "select 1 from dual;" –connect-timeout=5 &> /dev/null
#判斷執(zhí)行結(jié)果$?,為0執(zhí)行成功,為1出現(xiàn)錯(cuò)誤異常
if [ $? -ne 0 ]
then
python3 mail.py $mail "mysqldb down " "please check mysql-service on ${host[$i]}"
echo "mysql$i is down"
else
# python3 mail.py $mail "mysqldb is fine " "Do not need check mysql-service on ${host[$i]} "
echo "mysql$i is fine"
fi
done
#檢測(cè)mongodb
#清空計(jì)數(shù)變量
n=0
#按行讀取記錄了數(shù)據(jù)地址端口用戶名密碼信息的文件,存放進(jìn)對(duì)應(yīng)數(shù)組,此處文件為mongodb_message.txt,其格式如下:
#host:127.0.0.1 user:root passwd:root port:27017 authDB:admin 注意行首無(wú)空格
while read line
do
eval $(echo $line | awk -F"[: ]" '{printf("host[$n]=%s; user[$n]=%s; passwd[$n]=%s; port[$n]=%s; db[$n]=%s",$2,$4,$6,$8,$10)}')
let n++
done < mongodb_message.txt
let n–
for i in $(seq 0 $n);do
echo "show tables maxTimeMS(5000)" | mongo ${host[$i]}:${port[$i]}/${db[$i]} -u ${user[$i]} -p ${passwd[$i]} &> /dev/null
if [ $? -ne 0 ]
then
server=${host[$i]}
python3 mail.py $mail "mongodb down " "please check mysql-service on $server"
echo "mongodb$i is down"
else
# python3 mail.py $mail "mongodb is fine " "Do not need check mysql-service on ${host[$i]}"
echo "mongodb$i is fine"
fi
done
郵件腳本為參考他人腳本,用Python編寫,存放上述代碼腳本同目錄即可,郵件腳本代碼如下:
#!/usr/bin/env python
#
# encoding: utf-8
import sys
import smtplib # 加載smtplib模塊
import traceback
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
login_name = 'monitor@7net.cc' # 發(fā)件人郵箱賬號(hào),為了后面易于維護(hù),所以寫成了變量
login_pass = '*******' # 因發(fā)博客而隱藏,自己腳本中需要指定
smtp_port = 465
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((
Header(name, 'utf-8').encode(),
addr))
# addr.encode('utf-8') if isinstance(addr, unicode) else addr))
def send_mail(sender, recps, Ccs, subject, htmlmsg, fileAttachment):
smtpserver = 'smtp.exmail.qq.com'
receivers = recps + Ccs
try:
# msg = MIMEText(htmlmsg, 'html', 'utf-8')
msg = MIMEMultipart()
msg.attach(MIMEText(htmlmsg, 'html', 'utf-8'))
# msg['Subject'] = subject
msg['Subject'] = Header(subject, 'utf-8').encode()
# msg['From'] = sender
msg['From'] = _format_addr(sender)
Recp = []
for recp in recps:
Recp.append(_format_addr(recp))
ccs = []
for cc in Ccs:
ccs.append(_format_addr(cc))
msg['To'] = ','.join(Recp)
msg['Cc'] = ','.join(ccs)
# if fileAttachment!='' :
# # 附件
for file in fileAttachment:
part = MIMEApplication(open(file, 'rb').read())
attFileName = file.split('/')[-1]
part.add_header('Content-Disposition', 'attachment', filename=attFileName)
msg.attach(part)
# part = MIMEApplication(open(fileAttachment, 'rb').read())
# part.add_header('Content-Disposition', 'attachment', filename=fileAttachment)
# msg.attach(part)
smtp = smtplib.SMTP_SSL()
smtp.connect(smtpserver, smtp_port)
smtp.login(login_name, login_pass)
# smtp.login(username, password)
smtp.sendmail(sender, receivers, msg.as_string())
smtp.quit()
print('SendEmail success')
except:
traceback.print_exc()
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
# send_mail("監(jiān)控中心", ["吳青聰"], [], subject, "郵件內(nèi)容2", "")
send_mail("監(jiān)控中心", [to], [], subject, content, "")
if __name__ == "__main__":
main()