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

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

问题是,尽管测试文件为空,cron 有时会发送电子邮件。有时,主题标题“test”会被 cron 用自己的主题标题覆盖。如果不设置“MAILFROM”,则 cron 将使用 root,尽管 mailx 中有设置。

我对 cron 还很陌生,所以我不太确定我是否做对了。如果有人能指出问题所在,我将不胜感激。

答案1

您需要了解,这cron不会直接丢弃作业生成的输出。如果 cron 作业生成的输出未以其他方式处理(例如,通过邮寄给某人、将其放入文件或以其他方式处理),则此输出将按照 MAILTO 变量中的描述通过电子邮件发送。如果您不希望发生这种情况,则需要确保作业结束时不会出现任何输出;这就是为什么经常看到 crontab 条目说,例如,

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

该终端>& /dev/null用于告诉 cron 丢弃正在运行的可执行文件/脚本未处理的任何输出。

相关内容