syslog中的“(CRON)信息(未安装MTA,丢弃输出)”错误


196

我重新安装了Ubuntu 12.04.1 LTS和许多服务器。

我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,大约在同一时间,对于每台计算机,在高峰时,我的系统日志中都有75%的CPU高峰和以下信息:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

我已经安装了mono-complete,并且正在运行服务堆栈Web服务器。

我阻止这种情况发生的最佳方法是什么?我希望能够消除CPU峰值。


每天6:25?这些是来自/etc/cron.daily/的脚本。我只有一种尝试发送邮件的方式:人气竞赛。查看您的脚本,看看哪个脚本正在尝试发送邮件?那应该缩小范围。然后“ chmod 0644 /etc/cron.daily/script-name”以防止执行。

Answers:


172

Linux使用邮件将通知发送给用户。大多数Linux发行版都安装了邮件服务(包括MTA)。Ubuntu没有。

您可以安装邮件服务(例如postfix)来解决此问题。

sudo apt-get install postfix

或者您可以忽略它。我认为cron无法发送消息与CPU峰值无关(这与cron正在运行的基础作业有关)。安装MTA然后阅读消息可能是最安全的(这mutt是一个很好的系统邮件阅读器)。


5
安装postfix是件好事吗?哪种MTA最容易使用?
endlith 2013年

2
后缀是Linux最广泛使用的邮件服务器,坚持下去
Rápli安德拉斯

5
值得指出的是,在安装过程中,与cron一起使用(也就是说,如果您不希望实际向外发送电子邮件),应回答仅配置为本地使用。
steffen

我知道检查邮件的唯一方法是mailmailutils(debian)提供的,如果在postfix中内置了更好的方法?
ThorSummoner

79

发生这种情况是因为您的cron作业正在产生输出,然后cron守护程序尝试通过电子邮件将该输出发送给您(即root)。如果不需要该输出,解决此问题的最简单方法是在crontab上将其丢弃:

sudo crontab -e

并添加>/dev/null 2>&1到每个工作中:

* * * * * yourCommand >/dev/null 2>&1

10
这种方法的问题在于它不能解释高CPU使用率。Cron显然是在尝试交流,这实际上只是在忽略输出。万一有有用的调试信息,我将更倾向于处理输出而不是丢弃它。
奥利(Oli)

1
Oli,即使这是一个老问题,我也遇到了同样的问题,但它在Raspberry PI上。我No MTA installed, discarding output在日志中看到一堆消息,程序最终停止自行运行。我相信是因为CPU峰值。看来针对该问题发布的所有答案似乎都忽略了这一点。
ThN

4
要保留输出,请将命令放在脚本中,然后将stdout和stderr传递给logger。例如,yourCommand >/dev/null 2>&1 | logger -t mycmd。这会将输出放在syslog中,以确保安全,并停止MTA投诉。
CivMeierFan

56

就我而言,该消息暗示bash脚本存在权限问题,但是直到安装MTA时我才能看到它。

按照建议,我跑了:

sudo aptitude install postfix

在安装过程中以及再次运行cron作业后,我选择了“本地”:

sudo tail -f /var/mail/<user>

就我而言,我更换了

<user>

与“根”。

然后,我可以看到与权限相关的错误输出。


3
感谢您对如何检查邮箱以查看作业中的错误的额外评论!
斯图尔特·艾伦

32

如先前的回答所述,这是因为您的cron作业正在产生输出,然后cron守护程序尝试通过电子邮件将该输出发送给您。如果您不想(或无法)安装MTA,但想查看输出,则可以将cron作业的输出重定向到日志文件。使用以下命令编辑crontab文件

crontab -e

sudo如果问题出在root用户的crontab上,则使用该 命令),并在每个命令后添加,如下所示:>> /some/log/file 2>&1

0 3 * * * cmd   >> / some / log / file 2>&1

如果有一行多个命令,通过分离;,  &&  或者||,你应该做上面的每一个命令,就像这样:

0 3 * * * cmd 1   >> / some / log / file 2>&1;  cmd 2   >> / some / log / file 2>&1

或将它们分组,如下所示:

0 3 * * * cmd 1 ;   cmd 2   >> / some / log / file 2>&1

如果要忽略stdout并仅捕获stderr,请改用。将日志文件放在您想要的任何位置-主目录, 即使您确定不需要保留它。> /dev/null 2>> /some/log/file/var/log/tmp

然后在作业运行后查看日志文件。


28

在crontab中,将其添加为第一行:

MAILTO=""

这将防止cron尝试发送电子邮件。


4
#在此后请勿添加任何评论(),MAILTO=""否则将不起作用
SBF

23

如果您不想安装MTA(我目前不需要),则可以将cron作业的结果通过管道传输到日志文件。

sudo crontab -e

然后用您的Cron工作看起来像这样。

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

然后您可以拖尾日志,看看发生了什么

sudo tail -f -n 50 /var/log/somelogfile.log

这是我在syslog中看到该消息的任何服务器上一直在做的事情


我已经做到了,但是没有日志记录添加到文件中。
pir

您确定该cron作业正在运行吗?
安德鲁·麦克诺顿

是的,系统日志显示它正在启动。
pir

1
您需要在行的末尾添加“ 2>&1”,以将输出捕获到stderr到文件中。
MattSmith

15

这是一个古老的问题,但是在某些情况下还有一个有用的附加答案。

通过管道传输cron命令的输出,logger以便它们最终进入系统日志。

它比安装postfix稍微容易一些,并且将输出与其他日志一起放入syslog中。此命令将捕获stdout和stderr,因此您将不会看到该No MTA installed消息,并且会在syslog中看到所有输出。

cron条目示例:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

您可以mycmd使用以下方式查看带有标签的日志:

grep 'mycmd' /var/log/syslog

管道在cron工作中工作吗?
CivMeierFan

10

添加/dev/null 2>&1到cron job命令的一个副作用是,它将丢弃STDERRSTDOUT(标准错误以及输出)。如果您不希望来自cron的任何电子邮件,此方法效果很好。但是,如果您希望将错误通过电子邮件发送给您,请>/dev/null改用。阅读此博客文章以获得更多解释

不过,您仍然需要安装MTA(邮件传输代理)来发送错误电子邮件。Postfix非常简单,可以通过以下方式安装:sudo apt-get install postfix


据我了解,'> / dev / null'只会发送给他们,而'> / dev / null 2>&1'会记录所有错误吗?我应该使用什么来获取日志错误但没有邮件?我现在没有收到任何邮件(如我所愿),但是丑陋的“没有MTA…”
2014年

2
afaik,除了将输出发送到电子邮件之外,没有其他方法可以记录输出。您可以做的最接近的事情是为本地邮件传递设置后缀(如果您运行“ sudo apt-get install postfix”,则会提示您是否要设置本地传递。虽然这看起来很麻烦,但实际上确实有效。好了很多,每当我通过ssh登录,我看以前的作业已经失败的机器上一个新的电子邮件,我觉得它更方便不必检查日志。
paneer_tikka

2
  1. 首先,安装postfix,即可解决问题

    sudo apt-get install postfix
    
  2. 如果是Ubuntu,则可以编辑crontab文件

    sudo vim /etc/crontab
    
  3. 注意,编辑顶部文件,而不是第一行中的任何代码,然后输入

    MAILTO=root // current system user
    
  4. cron执行任何任务时,您会收到一封电子邮件

    mail
    

1
您的回答似乎不错,但我听不懂所有说明。也许您可以改善它。
zx485 '18


1

我在使用Kitematic Docker工具时遇到了这个问题。
转到magento容器,然后单击exe

然后跑

apt-get update

这是如果您要使magento在kitematic上运行。日志将在虚拟机上显示此错误:

需要更新。

抱歉,这让您迷路了,但这就是它的工作原理。您一直在迷路,但是只要阅读一下,这些碎片就会有一天在一起。耐心一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.