Linux设置邮件提醒

文章目录
  1. 1. 前言
  2. 2. mail基础
    1. 2.1. 安装
    2. 2.2. mail命令
    3. 2.3. 使用
      1. 2.3.1. 普通邮件
      2. 2.3.2. 普通邮件2
      3. 2.3.3. 高级邮件
  3. 3. 设置邮件提醒
  4. 4. 后记
  5. 5. 书签

前言

《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环境下搭建邮件服务器(一)