目的:基于前面文章kettle执行情况发送邮件
环境:centos 环境
工具:mail、crontab
首先我们看下当前环境下有没有安装mail
which mail
可以看见有对应路径,说明环境已经安装了mail
如果没有安装就执行命令安装一下,这是linux环境自带的一般不会不存在
然后执行下面命令,在mail.rc文件最下面写上发送邮件的命令,注意一点smtp-auth-password=是授权码 ,不是邮箱密码
vim /etc/mail.rc
#发送邮件命令
set bsdcompat
set from=xxxxxx@163.com #发送邮件后显示的邮件发送方
set smtp=smtp.163.com #网易邮箱smtp邮件服务器地址
set smtp-auth-user=xxxxx@163.com #发件人邮箱
set smtp-auth-password=fsdfsfsGZTUCHO #发件人邮箱授权码
set smtp-auth=login #动作为登录
进入邮箱,找到POP3/SMTP/IMAP设置,新增授权码。服务器地址也会有提示,找不到直接百度也能查到。
接下来就是编写发送邮件代码 vim
#日志文件
log_file=log
#执行读取到的JOB,需配置连接kettle的用户名 密码,指定日志存储位置
/data/kettle/data-integration/./kitchen.sh -rep=SHINSUN_PRO -user=admin -pass=admin -level=Basic -dir=/SHINSUN_GQH/SHINSUN_JOB -job=shinsun_sd_plan_job >$log_file
#查找日志文件有没有错误
#错误个数
number=$(grep -rn "ERROR" "$log_file" | wc -l)
echo $number
#判断job执行情况ERROR个数 大于0说明执行报错
if [ $number -gt 0 ]
then
echo -e 'Dear All:\n 见信好!今日job执行失败!附件是执行日志,请查收' | mail -s '系统job执行情况' -a $log_file xxxx@163.com
else
echo -e 'Dear All:\n 见信好!今日job执行成功!又是愉快的一天' | mail -s '系统job执行情况' xxxx@163.com
fi
通过echo -e '正文' | mail -s '主题' -a 附件 xxxx@163.com 发送邮件并附带日志文件 (-e是让\n进行换行,不进行转义)
number=$(grep -rn "ERROR" "$log_file" | wc -l) 这段命令是读取日志文件中的ERROR个数,如果出现ERROE表示job在执行中出现了错误
最后通过crontab -e 设置脚本执行时间,这里简短一点,因为前面的文章已经写了如何使用crontab
上面这段代码也是基于这篇文章的,放在job调度的sh脚本里
结果图:
如果出现smtp-server: 550 Invalid User错误
你可以看下set from=xxxxxx@163.com #发送邮件后显示的邮件发送方 这个位置是不是你的邮箱号,
我尝试过修改from<>邮箱号,提示smtp-server: 550 Invalid User
把from修改回来就好了
参考文献: