1. 前言
《Linux设置定时任务》一文中,我们学习了使用crontab设置定时任务的方法,并用它来获取ganglia的运行状态。这样还不够,我们想要在ganglia的运行状态出现问题时通知我们,这样,我们就不用每天自己查看日志了。
本文主要参考Ubuntu mail命令发送邮件 和 如何通过Shell脚本实现发送邮件通知功能?。
2. 安装配置mail
2.1. ubuntu
1、安装mailutilssudo 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、安装邮件MUAyum install -y mailx
3、配置 /etc/mail.rc,在尾部添加:
1 | set from=quizthink@163.com |
不要使用25端口,阿里云服务器和163邮件服务器25端口不通。
4、配置数字证书
1 | mkdir -p /root/.certs/ |
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 |
|
5. 后记
至此,大功告成!《Linux设置定时任务》配合《Linux设置邮件提醒》,简直完美!两篇文章完成了一个小系统:定时生成ganglia日志,定时审阅ganglia日志,并且把审阅结果通过邮件发送给管理员。