Cron输出是通过电子邮件发送的,而不是在正文中显示?

时间:2014-10-05 05:18:20

标签: linux cron crontab

我已经通过cPanel设置了很长时间的crons,输出总是通过电子邮件发送给我。但是,我需要一个cron来运行root权限,所以我在crontab中添加了这样的东西:

5 0,12,8,20 * * * php /path/to/file.php 2>&1 | mail -s "my cron job" my@email.com

该命令执行并收到一封电子邮件,但输出附加为讽刺名为noname的文件。

如何让输出显示在电子邮件正文中而不是附加文件中?

2 个答案:

答案 0 :(得分:1)

首先,您可以确认您使用的是哪个邮件程序以及您使用的是哪个cron程序?例如。默认情况下,大多数cron软件都会限制PATH,除非你将它设置在crontab的顶部。

至少来自GNU mailutils的

/ bin / mail不支持在没有其他程序(uuencode)帮助的情况下发送附件。来自Heirloom的/ bin / mailx您的系统可能正在使用它支持附件,并且很乐意按照{{3}将包含非法字节序列(非ASCII)的非交互模式发送的邮件从文本转换为八位字节流文件附件}

您可以通过

将输出显示在正文而不是附加文件中
  1. 更改您使用的邮件软件
  2. 在将其输出到邮件之前从输出中删除任何非法字节序列。有关如何执行此操作,请参阅现有的StackOverflow问题Changelog

答案 1 :(得分:0)

我强烈建议您使用mutt代替

5 0,12,8,20 * * * php /path/to/file.php 2>&1 |mutt -s "your cron job" -- my@email.com

或者如果你真的开始使用你的默认邮件,可能会使用中间文件

5 0,12,8,20 * * * php /path/to/file.php 2>&1 /tmp/outfile; mail -s "your cron job" my@email.com < /tmp/outfile; rm -f /tmp/outfile