【问题标题】:suppress certain output directly in crontab [closed]直接在 crontab 中抑制某些输出 [关闭]
【发布时间】:2014-01-16 11:01:16
【问题描述】:

操作系统:ubuntu 10.04 LTS

大家好

我们使用的脚本每天都会在我们的 ubuntu 机器上进行更新

cron 守护进程通过邮件发出通知

而且总是出现以下内容:stdin: is not a tty

如果出现此错误,我将注释掉这一行,并且不应发送任何通知

前段时间我发现了一种直接在 crontab 中抑制输出的方法

但是找不到了

有人知道怎么做吗?

问候约翰。

【问题讨论】:

  • 您可能需要考虑将实际的 crontab 条目添加到您的问题中,因为它有助于确定应该使用哪种输出重定向。您很可能正在寻找将标准错误重定向到 /dev/null 的内容,这可以通过在命令末尾添加 2> /dev/null 来完成。
  • 但我需要通知的错误消息......所以我只会抑制这个输出:stdin: is not a tty .....我必须知道发生了什么
  • 如果你“必须知道发生了什么”,你需要更详细地解释你的问题。更新您的问题以向我们展示您的 crontab 中的行。从 cron 执行的脚本首先不应该尝试从 stdin 读取;这可能是你问题的根源。

标签: bash crontab suppress


【解决方案1】:

错误信息:

stdin: is not a tty

表明您的 cron 作业中的某些内容正在尝试从标准输入中读取。 cron 调用的作业不应该这样做(当然,除非它的标准输入被重定向)。一个小实验表明 cron 作业的标准输入是空的,并且不是 tty。如果我将 vi 作为 cron 作业运行(不要在家里尝试),我会通过电子邮件收到一条奇怪的错误消息,其中包括以下警告:

Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal

所以你显然在你的 cron 作业中运行 一些东西,它 (a) 假设它可以从 stdin 读取,并且 (b) 假设 stdin 连接到一个终端 --即,它是某种交互式命令。

如果可以,您应该追踪做出这些假设的命令并修复它,而不仅仅是丢弃错误消息。 (后者让人想起通过用胶带覆盖汽车仪表板来解决警告灯问题。)

要么不要从你的 crontab 调用交互式命令,要么找到一种方法让你调用的任何命令以某种“批处理模式”运行。

另一方面,您需要从 cron 作业运行一些交互式命令是有原因的,而使其正常运行太困难了。在这种情况下,您可以按照Steve Kehlet's answer 的建议丢弃错误消息。

如果您难以追查问题,以下几个有用的技巧是:

通过每分钟临时运行一次来​​测试 cron 作业:

* * * * * some-command

因此您只需等待不到一分钟即可看到结果。如果命令是脚本,请尝试将其简化为显示问题的最小示例。

您还可以更新您的问题,向我们展示您的 crontab 条目和您正在运行的脚本(如果脚本不是太大的话)。

【讨论】:

    【解决方案2】:

    您的问题的答案如下:

    5 0 * * * your_command 2>&1 | grep -v 'stdin: is not a tty'
    

    将 stderr 重定向到 stdout,然后将所有输出通过grep -v 管道化以消除不需要的错误。

    编辑: 在没有进一步调查的情况下将其加入是一种快速而肮脏的修复。如果您只需要让那些讨厌的电子邮件静音并继续前进,请执行此操作。但是,从长远来看,您可能会发现尝试找出导致错误的原因并阻止它更具教育性/有益性。然后,例如,如果您添加更多的 cron 作业,则不必继续将其添加到每个作业中。最后,如果修复有问题的命令并不容易,您可能会发现无论如何都必须这样做。

    谷歌搜索表明它可能是由something in your .bashrc/root/.profile 引起的。检查这些,并在需要时修复它们(可能将 mesg -n 更改为 tty -s && mesg -n)。

    如果您无法深入了解问题或需要更多想法,请使用更多信息更新您的问题。

    【讨论】:

    • 这让我想起了在你的汽车仪表板上贴上一个指示灯。最好首先找出生成错误消息的原因。
    • 可能,但问题正是“我如何在仪表板上的这个指示灯上贴上胶带?”
    • 是的,我建议一个好的答案会指出这是一个坏主意。 OP 很可能是 XY problem 的受害者。
    • 当然可以,但有时最好知道如何使用小胶带解决问题,尤其是当它不是您的“汽车”需要修复时。
    • 我已经更新了我的答案,还建议尝试找出错误的原因,而不是仅仅掩盖它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2021-12-17
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多