实验环境: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 from=FromUser@163.com
set smtp=smtp.ym.163.com
set smtp-auth-user=AuthUser@163.com
set smtp-auth-password=PASSWORD
set smtp-auth=login
测试是否正常收发邮件
echo "123456" | mail -s "报警" AuthUser@163.com
如果正常,那么就会收到一份邮件
配置脚本:
mv /usr/sbin/sendmail{,.bak}vim /usr/sbin/sendmail #!/bin/bash # MAIL=`cat -` echo $MAIL | mail -s "警告" AuthUser@163.com
配置完成。
测试:
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-generatedX-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命令将这些内容发送出去。
思路提供完毕。希望能举一反三。
如有疑问可以联系:root@opsnote.com
原创文章,作者:SSA,如若转载,请注明出处:http://www.178linux.com/23256