OS:ubuntu 10.04 LTS
嘿伙计们
使用的脚本每天在我们的ubuntu机器上进行更新
cron deamon通过邮件发送通知
并且总是来自以下:stdin:不是tty
此行我将注释掉,如果发生此错误,则不会发送通知
前段时间我发现了一种直接在crontab中压缩输出的方法
但再也找不到了
有人知道怎么做吗?
尊重约翰。
答案 0 :(得分:1)
您的问题的答案如下:
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
)。
如果您无法了解问题或需要更多想法,请使用更多信息更新您的问题。
答案 1 :(得分:1)
错误消息:
stdin: is not a tty
建议你的cron工作中的某些东西试图从标准输入中读取。由cron 调用的作业不应该这样做(当然,除非重定向其标准输入)。一个小实验表明,cron作业的标准输入是空的,而不是tty。如果我作为一个cron作业运行vi
(不要在家里尝试这个),我会通过电子邮件收到一条奇怪的错误消息,包括这些警告:
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条目和您正在运行的脚本(如果脚本不是太大)。