为什么 >/dev/null 2>&1 不起作用?

为什么 >/dev/null 2>&1 不起作用?

运行 Ubuntu 16.04 我已将以下内容添加到 /etc/crontab 中:

* * * * * root wget https://www.exmaple.org/bus/ >/dev/null 2>&1

cron 作业运行正常,但结果作为文件写入 /root/,而不是按预期被丢弃。

答案1

>/dev/null丢弃命令的标准输出。你的例子中没有。2>&1导致命令的标准错误被丢弃。在您的示例中,这包含 wget 显示的状态和错误信息。

如果 URL 有效(例如,如果服务器返回页面的某些内容),wget 会将页面内容保存在文件中。这既不是显示 wget 的标准输出,也不是 wget 的标准错误:它是 wget 保存在文件中的一些数据。这不受重定向的影响,因为 wget 输出到按名称打开的文件,而不是标准流。

如果您不想将输出保存在任何地方,请告诉 wget 将其保存到/dev/null

wget -O /dev/null …

请注意,来自 cron 作业的错误很有用,但 Ubuntu 默认情况下会丢弃它们。 cron 作业的输出(标准输出和标准错误)通过本地邮件发送;看管理员应该如何阅读 root 的邮件?了解如何实现这一点。令人烦恼的是,即使一切正常,wget 也会产生大量输出,但它没有选项只显示错误。您可以通过保存输出并在命令成功时丢弃它来解决此问题:

trace=$(wget … 2>&1) || echo "$trace" >&2

相关内容