Linux设置邮件提醒

前言

《Linux设置定时任务》一文中,我们学习了使用crontab设置定时任务的方法,并用它来获取ganglia的运行状态。这样还不够,我们想要在ganglia的运行状态出现问题时通知我们,这样,我们就不用每天自己查看日志了。

本文主要参考Ubuntu mail命令发送邮件如何通过Shell脚本实现发送邮件通知功能?

mail基础

安装

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。

使用

普通邮件

目标:给邮箱 voidking@qq.com 发送邮件,主题为“Hello VoidKing”,内容为“Welcome to mail world!”

mail -s 'Hello VoidKing' voidking@qq.com
提示Cc,这里不需要抄送,就直接回车。然后输入邮件内容“Welcome to mail world!”,回车,ctrl+D,发送邮件。

但是,等待了几分钟,并没有收到邮件,垃圾箱也没有。
mail,查看email的发送状态为Undelivered Mail Returned,原来没有投递出去。

查看邮件系统日志:tail -n 50 /var/spool/mail/test,提示host mx3.qq.com[183.57.48.35] said: 550 Mail content denied。看来qq邮箱的垃圾邮件防御机制做的不错,那就换个163邮箱,没想到依然失败。

那就换一台服务器!发送给 voidking@qq.com ,成功!很尴尬。。。

普通邮件2

除了上面的方式发送邮件,我们还可以使用:
mail -s 'Hello VoidKing' voidking@qq.com <<< 'Welcome to mail world!'

或者使用:
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com

高级邮件

1、从文本读入内容发送邮件
mail -s 'Error report' voidking@qq.com < /tmp/log/ganglia/error-20180524.log

2、发送附件
mail -s 'Error report' voidking@qq.com -A /tmp/log/ganglia/ganglia-20180524.log < /tmp/log/ganglia/error-20180524.log

3、指定发件人
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com -aFrom:haojin@qq.com

失败了,收不到邮件,不知道什么原因,留个坑吧。

设置邮件提醒

目标:每天获取一次ganglia的状态日志,然后通过checkganglia.sh脚本进行审阅。审阅完毕,发送审阅结果到管理员的邮箱。

修改checkganglia.sh脚本为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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设置定时任务》配合《Linux设置邮件提醒》,简直完美!两篇文章完成了一个小系统:定时生成ganglia日志,定时审阅ganglia日志,并且把审阅结果通过邮件发送给管理员。

书签

Linux命令大全——LMNOPQ

如何在Ubuntu环境下搭建邮件服务器(一)

0%