Linux 脚本写入stdout和stderr时如何防止cron电子邮件

Linux 脚本写入stdout和stderr时如何防止cron电子邮件,linux,unix,cron,crontab,io-redirection,Linux,Unix,Cron,Crontab,Io Redirection,我有一个脚本,我们称之为script.sh,它同时写入stdout和stderr 我想通过管道将此脚本的输出(stdout)传输到mailx,但我不想从cron发送任何电子邮件 这是我的crontab,设置为每天下午4:00: 00 16 * * * /path/to/script.sh | mailx name@domain.com >/dev/null 2&>1 通过mailx我获得脚本的stdout输出,但我仍然从cron收到一封包含脚本的stderr输出的电子邮件

我有一个脚本,我们称之为
script.sh
,它同时写入
stdout
stderr

我想通过管道将此脚本的输出(
stdout
)传输到
mailx
,但我不想从
cron
发送任何电子邮件

这是我的crontab,设置为每天下午4:00:

00 16 * * * /path/to/script.sh | mailx name@domain.com >/dev/null 2&>1
通过
mailx
我获得脚本的
stdout
输出,但我仍然从
cron
收到一封包含脚本的
stderr
输出的电子邮件

我还尝试剥离管道左侧的
stderr
,如下所示:

00 16 * * * /path/to/script.sh 2> /dev/null | mailx name@domain.com
这会导致
cron
向我发送一封电子邮件,内容如下:

Null message body; hope that's ok
事实上,亲爱的克朗,我不同意这样做

关于如何实现这一点有什么想法吗

编辑:另一个有趣的实验

00 16 * * * test -d /

这没有任何输出,但我收到一封来自
cron
的电子邮件,说邮件主题和正文是空的。。。那为什么要寄呢\

这有点老套……但是您可以将MAILTO变量设置为空值,这样cron就根本不发送邮件了

使用以下命令打开crontab文件:

crontab -e
在顶部,只需预先结束:

MAILTO=""
我不知道这是否违背了你的一些限制

如果您只想为您的脚本执行此操作,您可以在脚本中尝试类似的操作:

#!/bin/sh

OLDMAILTO=$MAILTO

MAILTO=""

# do your stuff here

MAILTO=$OLDMAILTO

只要cron命令有一些输出(stdout或stderr),您就可以随时收到邮件。 消息“Null message body;hope that's ok”是来自
mailx
命令的警告。以下修改将抑制来自mailx的所有警告:

00 16 * * * /path/script.sh 2> /dev/null | mailx name@domain.com > /dev/null 2>&1
注:

  • 请注意,如果发送电子邮件时出现任何错误,您将不会收到任何相关报告
  • 你确定
    script.sh
    的标准也不应该邮寄吗?如果是,请使用
    2>&1
    而不是
    2>/dev/null

  • 不幸的是,我不能这样做。我正在编写一个脚本,将其安装在用户的crontab上;如果他有其他条目,我不想弄乱他们的MAILTO变量。完全可以理解。我也做过类似的事情…过一会儿我会编辑我的答案