cron不遵循bash脚本的指令有条件地发送邮件

我遇到麻烦让cron基于在bash脚本中设置的预定义条件发送附件。 以下是我的/ etc / crontab设置:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin [email protected] [email protected] 0,30 * * * * root /some/bash/script 

bash脚本包含:

 #!/bin/bash PATH=/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin if [ -s /var/log/test ]; then echo "test" | mailx -s "test" -a /var/log/test -r [email protected] [email protected] fi exit 0 

问题是,尽pipetesting文件是空的,但cron有时会发送一封电子邮件。 有时主题头“test”被cron用自己的主题头覆盖。 没有设置“MAILFROM”,cron将使用root,尽pipe在mailx中的设置。

我对cron很新,所以我不太确定自己是否做得正确。 如果有人能指出是什么原因造成这个问题,我将不胜感激。

您需要了解cron不会丢弃作业生成的输出。 如果一个cron作业产生的输出不能被处理(例如,通过邮寄给某人,或者把它放到一个文件中,或者以某种方式),这个输出将按照MAILTOvariables中的描述通过电子邮件发送。 如果你不希望发生这种情况,你需要确保没有任何产出能够摆脱工作的结束; 这就是为什么看到crontab条目非常常见,例如,

 */5 * * * * munin /usr/bin/munin-cron >& /dev/null 

那个terminal>& /dev/null是告诉cron放弃任何不被正在运行的可执行文件/脚本处理的输出。