一个计算机技术爱好者与学习者

0%

好好学Linux:Linux设置邮件提醒

1. 前言

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

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

2. 安装配置mail

2.1. ubuntu

1、安装mailutils
sudo apt-get install mailutils

2、General type of mail configuration 选择 Internet Site

3、System mail name 输入 mail.voidking.com

2.2. centos7

安装配置过程参考 Centos 7 安装 Mail发送邮件

1、获取发送者邮箱授权密码
登录 https://mail.163.com
设置,POP3/SMTP/IMAP,授权密码管理

授权码是用于登录第三方邮件客户端的专用密码。
适用于登录以下服务: 您开启的服务(例如POP3/IMAP/SMTP)、Exchange/CardDAV/CalDAV服务。

2、安装邮件MUA
yum install -y mailx

3、配置 /etc/mail.rc,在尾部添加:

1
2
3
4
5
6
7
set from=quizthink@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth=login
set smtp-auth-user=quizthink@163.com
set smtp-auth-password=xxx
set ssl-verify=ignore
set nss-config-dir=/root/.certs

不要使用25端口,阿里云服务器和163邮件服务器25端口不通。

4、配置数字证书

1
2
3
4
5
6
7
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -L -d /root/.certs
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt

5、测试发送邮件
echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com
查看邮箱,正常的话应该已经收到邮件了。如果没有收到邮件,可以查看日志进行排查:
tail /var/log/maillog

2.3. macos

参考文档:《MacOS配置发送邮件》

3. mail命令

3.1. 命令格式

mail [OPTION...] [address...]
常用到的选项,一个是s,代表主题;一个是A,代表附件。其他的需要时查看help。

3.2. 发送普通邮件

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

echo 'Welcome to mail world!' | mail -s "Hello VoidKing" voidking@qq.com

但是,等待了几分钟,并没有收到邮件,垃圾箱也没有。
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 ,成功!很尴尬。。。就这么着吧

3.3. 发送高级邮件

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

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

4. 设置邮件提醒

目标:每天获取一次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

5. 后记

至此,大功告成!《Linux设置定时任务》配合《Linux设置邮件提醒》,简直完美!两篇文章完成了一个小系统:定时生成ganglia日志,定时审阅ganglia日志,并且把审阅结果通过邮件发送给管理员。

6. 书签

Linux命令大全——LMNOPQ

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

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-linux-mail/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~