前言
《Linux設(shè)置定時任務(wù)》一文中,我們學(xué)習(xí)了使用crontab設(shè)置定時任務(wù)的方法趴腋,并用它來獲取ganglia的運行狀態(tài)悯森。這樣還不夠,我們想要在ganglia的運行狀態(tài)出現(xiàn)問題時通知我們鳖链,這樣,我們就不用每天自己查看日志了。
本文主要參考Ubuntu mail命令發(fā)送郵件 和 如何通過Shell腳本實現(xiàn)發(fā)送郵件通知功能芙委?逞敷。
mail基礎(chǔ)
安裝
1、安裝mailutils
sudo apt-get install mailutils
2灌侣、General type of mail configuration選擇Internet Site推捐。
3、System mail name輸入mail.voidking.com侧啼。
mail命令
命令格式:
mail [OPTION...] [address...]
常用到的選項牛柒,一個是s,代表主題痊乾;一個是A皮壁,代表附件。其他的需要時查看help哪审。
使用
普通郵件
目標(biāo):給郵箱 voidking@qq.com 發(fā)送郵件蛾魄,主題為“Hello VoidKing”,內(nèi)容為“Welcome to mail world湿滓!”
mail -s 'Hello VoidKing' voidking@qq.com
提示Cc滴须,這里不需要抄送,就直接回車茉稠。然后輸入郵件內(nèi)容“Welcome to mail world描馅!”,回車而线,ctrl+D铭污,發(fā)送郵件。
但是膀篮,等待了幾分鐘嘹狞,并沒有收到郵件,垃圾箱也沒有誓竿。
mail
磅网,查看email的發(fā)送狀態(tài)為Undelivered Mail Returned,原來沒有投遞出去筷屡。
查看郵件系統(tǒng)日志:tail -n 50 /var/spool/mail/test
涧偷,提示host mx3.qq.com[183.57.48.35] said: 550 Mail content denied”兴溃看來qq郵箱的垃圾郵件防御機制做的不錯燎潮,那就換個163郵箱,沒想到依然失敗扼倘。
那就換一臺服務(wù)器确封!發(fā)送給 voidking@qq.com ,成功!很尷尬爪喘。颜曾。。
普通郵件2
除了上面的方式發(fā)送郵件秉剑,我們還可以使用:
mail -s 'Hello VoidKing' voidking@qq.com <<< 'Welcome to mail world!'
或者使用:
echo 'Welcome to mail world泛豪!' | mail -s "Hello VoidKing" voidking@qq.com
高級郵件
1、從文本讀入內(nèi)容發(fā)送郵件
mail -s 'Error report' voidking@qq.com < /tmp/log/ganglia/error-20180524.log
2侦鹏、發(fā)送附件
mail -s 'Error report' voidking@qq.com -A /tmp/log/ganglia/ganglia-20180524.log < /tmp/log/ganglia/error-20180524.log
3候址、指定發(fā)件人
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com -aFrom:haojin@qq.com
失敗了种柑,收不到郵件,不知道什么原因匹耕,留個坑吧聚请。
設(shè)置郵件提醒
目標(biāo):每天獲取一次ganglia的狀態(tài)日志,然后通過checkganglia.sh腳本進行審閱稳其。審閱完畢驶赏,發(fā)送審閱結(jié)果到管理員的郵箱。
修改checkganglia.sh腳本為:
#!/bin/bash
DATE=`date +%Y%m%d`
filename="ganglia-${DATE}.log"
prefix="ganglia-${DATE}"
hosts=`grep test@ /tmp/log/ganglia/${filename} | wc -l`
pids=`grep gmond.pid /tmp/log/ganglia/${filename} | wc -l`
if [ ${hosts} != 10 ]
then
echo "Some hosts are offline!" >> /tmp/log/ganglia/error-${DATE}.log
fi
if [ ${hosts} != ${pids} ]
then
echo "Some ganglia services have stopped!" >> /tmp/log/ganglia/error-${DATE}.log
cd /tmp/log/ganglia/
csplit /tmp/log/ganglia/${filename} /test@/ -n2 -s {*} -f ${prefix} -b ".log.%02d"
rm ${prefix}.log.00
for file in /tmp/log/ganglia/${prefix}.log.*
do
if [ -f "${file}" ]
then
#echo "${file} is file"
if [ `grep gmond.pid ${file} | wc -l` == 0 ]
then
echo `grep test@ ${file}` >> /tmp/log/ganglia/error-${DATE}.log
fi
fi
done
fi
# mail info
if [ ! -f "/tmp/log/ganglia/error-${DATE}.log" ]
then
mail -s "HappyDay${DATE}" voidking@qq.com <<< "All services are running!"
else
mail -s "SadDay${DATE}" voidking@qq.com -A /tmp/log/ganglia/ganglia-${DATE}.log < /tmp/log/ganglia/error-${DATE}.log
fi
后記
至此既鞠,大功告成煤傍!《Linux設(shè)置定時任務(wù)》配合《Linux設(shè)置郵件提醒》,簡直完美嘱蛋!兩篇文章完成了一個小系統(tǒng):定時生成ganglia日志蚯姆,定時審閱ganglia日志,并且把審閱結(jié)果通過郵件發(fā)送給管理員洒敏。