最近给一台机器搞自动巡检发邮件


之前其他机器用的都是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


希望可以帮到大家,谢谢