我有一些python脚本每天在cron中运行。如果我的脚本中有STDERR OUTPUT ,我怎么能让cron给我发电子邮件?我希望能够邮寄多个收件人,并为每个cron条目单独设置主题行。
我试过了:
./prog > /dev/null | mail . . .
但它不起作用 - 当没有STDERR时我仍然收到空白的电子邮件。我是否需要在脚本本身中执行此操作?
对不起,如果这看起来很基本,我已经google了很多,但似乎无法找到这个答案。
答案 0 :(得分:26)
对于cron,您不需要通过邮件管道。 cron守护程序将自动将您命令的任何输出邮寄给您。您的crontab条目应如下所示:
# every minute
* * * * * ./prog >/dev/null
如果没有STDERR输出,您将不会收到任何邮件。
答案 1 :(得分:15)
你问的是不正确的问题。当您使用mail(1)发送电子邮件时,它与cron不再相关。你真正需要的是将stderr传递给邮件的stdin。普通管道是从stdout到stdin,解决这个问题的最简单方法是重定向:
{ /prog > /dev/null ; } 2>&1 | mail ...
或者由于重定向顺序混乱而不太清楚:
/prog 2>&1 > /dev/null | mail ...
答案 2 :(得分:13)
mail v1.6可以选择不发送空体消息:
-E Do not send messages with an empty body.
This is useful for piping errors from cron(8) scripts.
这可能就是你要找的东西。
答案 3 :(得分:8)
-s
文件测试将告诉您文件是否存在且大小是否大于零。
./prog >/dev/null 2>some/file ; if [ -s some/file ] ; then mail < some/file ; fi
答案 4 :(得分:8)
答案 5 :(得分:-2)
如果您的SCRIPT具有可能产生您希望收到通知的STDERR的命令,那么您需要在脚本本身内使用mail或mailx调用(如果是其他的话)。 cron作业STDOUT和STDERR重定向仅适用于cron作业 EXECUTION STDOUT和STDERR。 hkmaly把它放在了n
上