实验环境:centos 6.8 所需软件:mailx或msmtp或smtpEmail等 smtp客户端程序 所需帐号:我这使用的是163邮箱。 本方案优点:安装软件少,无须启动postfix等邮件服
实验环境:centos 6.8
所需软件:mailx或msmtp或smtpEmail等 smtp客户端程序
所需帐号:我这使用的是163邮箱。
本方案优点:安装软件少,无须启动postfix等邮件服务。无须配置postfix邮件服务。由于调用的是注册邮箱,所以也不会给移入到垃圾邮件中。
建议:生产中,不管是什么服务发送邮件的建议使用外部smtp帐号,不会导致移入到垃圾邮件列表中。
需求环境:由于我们线上脚本过多,而且也没有报警警告,所以无法获取其执行情况。导致最后老板发现,结果懂的。
然后与开发沟通,运维这边无法保证脚本的逻辑性错误,只能保证代码是否执行。代码逻辑性错误需要在脚本中判断并STDERR输出。
我是安装的mailx来实现的,过程简单。
安装mailx:yum -y install mailx
安装完成后会生成mail命令。
执行一次mail命令会生成 /etc/mail.rc 文件。
编辑/etc/mail.rc 在最后一行添加
set [email protected]
set smtp=smtp.ym.163.com
set [email protected]
set smtp-auth-password=PASSWORD
set smtp-auth=login
测试是否正常收发邮件
echo "123456" | mail -s "报警" [email protected]
如果正常,那么就会收到一份邮件
配置脚本:
mv /usr/sbin/sendmail{,.bak}
vim /usr/sbin/sendmail
#!/bin/bash
#
MAIL=`cat -`
echo $MAIL | mail -s "警告"
[email protected]
配置完成。
测试:
crontab -e
*/1 * * * * echo "1"
添加一行输出,那么1分钟后就可以收到报警邮件了。
原理:
crond计划任务执行任务后,标准输出,错误输出都会输入到屏幕。
如果定义了MAILTO变量(在/etc/crontab已经定义),就会调用/usr/sbin/sendmail发送邮件。
crond传递格式如下:
From: root (Cron Daemon)
To: root Subject:
Cron <root@opsnote> echo "1" Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root> 1
那个脚本的的作用就是截取这些内容,然后调用mail命令将这些内容发送出去。
所以,需要正确的内容重定向至文件或者/dev/null,错误的才输出出来告警。否则亲的邮箱就被轰炸了。
例:这样定义就OK,如果错误也输出到/dev/null就无法实现告警了。
*/1 * * * * l /root > /dev/null
思路提供完毕。希望能举一反三。
更多博客请移步:https://opsnote.com