今天早上起来看到非法信息报警邮件为空,非常纳闷,明明昨天已经调试好了的,怎么会?于是开始找原因,终于发现了问题的所在。
       登录到中控,看那个过滤非法信息的脚本产生的log文件,果然为空,说明脚本执行了,但是没有产生结果。于是,我手动去执行那个脚本,结果很正常,产生的log文件里记录了全部的非法信息,很正常,那为什么在crontab里就不行呢。我的计划任务是这样写的:
0 7 * * *  /bin/bash /home/adminxxx/mail-feifa.sh &>/dev/null
       注意到后面的 &>/dev/null了吧,即把所有产生的信息都输出到“黑洞”,然后我突然想起脚本里使用了tee命令,当初是为了测试时既能生成log文件又可以在屏幕上输出而使用的。例如:echo "hello world!" | tee /home/hello.log  ,她先会在屏幕上输出然后会把输出的数据流重导向hello.log文件,这个过程是一个流过程,也就是按顺序的。而我在第一步就把数据流导向了“黑洞“,哪还有什么数据流被写导文件里呀,所以那个log文件为空。

       解决方法:把脚本里的tee命令替换成>或者在计划任务中去掉 &>/dev/null。首选第一中方法。
 
 
注意:以上解释有误,tee命令是从标准输入读取数据,将其内容输出到标准输出, 同时保存到文件。注意是同时,而非先输出到标准输出设备(屏幕),再流向文件的。做事千万不要想当然,致歉!