最近给一台机器搞自动巡检发邮件
之前其他机器用的都是sendmail
直接执行下面的命令是没有问题的
这台由于有别的业务所以装的是postfix
下面是我的定时任务
0 8 * * * /opt/xunjian/xunjian.sh > /opt/xunjian/xunjian;mail -s '22.44.55.66' 154660@qq.com < /opt/xunjian/xunjian
手动执行效果理想,邮件中可以直接显示结果
/opt/xunjian/xunjian.sh > /opt/xunjian/xunjian
前面的命令没有任何问题,可以通过结果查看出来
我是K哥
mail -s '22.44.55.66' 154660@qq.com < /opt/xunjian/xunjian
后面的命令手动单独操作也没有问题
如果把这段命令加入crontab中
那么邮件中看到的结果会是一个附件,附件名如下
tcmime.1205.1205.16703.bin
那么问题来了,为什么会是这样呢?
我们来细想一下,如果mail配置有问题,那么邮件根本不会收到
邮件可以收到但是显示成为附件
查看了百度谷歌,很多一样的问题
终于找到个靠谱的回答:crontab环境变量
如何解决呢,很简单就是加入引用全局变量
source /etc/profile
我是K哥
我把命令改成如下就可以正常显示邮件了
0 8 * * * /opt/xunjian/xunjian.sh > /opt/xunjian/xunjian;source /etc/profile;mail -s '133.22.123.22' 1546760@qq.com < /opt/xunjian/xunjian
或者你也可以执行文件
0 8 * * * /opt/mail.sh
vi /opt/mail.sh
#!/bin/bash
source /etc/profile
/opt/xunjian/xunjian.sh > /opt/xunjian/xunjian
mail -s '133.22.123.22' 1546760@qq.com < /opt/xunjian/xunjian
希望可以帮到大家,谢谢