当前位置: 首页>>技术问答>>正文


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

,

问题描述

我有一个全新的Ubuntu 12.04.1 LTS安装了许多服务器。

我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,在每台机器的大约同一时间,我会在秒杀时获得75%的CPU峰值以及我的系统日志中的以下信息:

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

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

对我来说,阻止这种事情发生的最好办法是什么?我希望能够删除CPU峰值。

最佳解决方法

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

你可以安装一个邮件服务,例如postfix来解决这个问题。

sudo apt-get install postfix

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

次佳解决方法

发生这种情况是因为您的cron作业正在生成输出,然后cron守护程序会尝试将该输出发送给您(即root)。如果你不需要这个输出,解决这个问题的最简单的方法就是在crontab中放弃它:

sudo crontab -e

并将>/dev/null 2>&1添加到每个作业:

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

第三种解决方法

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

正如建议我跑了:

sudo aptitude install postfix

我在安装过程中和再次运行cron作业后选择了”Local”:

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

在我的情况下,我换了

<user>

与”root”。

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

第四种方法

在crontab中添加这个作为第一行:

MAILTO=""

这将防止cron尝试发送e-mail。

第五种方法

如果您不想安装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中看到该消息

第六种方法

正如在前面的回答中所述,发生这种情况是因为您的cron作业正在生成输出,然后cron守护进程会尝试将该输出通过电子邮件发送给您。如果您不想(或不能)安装MTA,但希望查看输出,则可以将cron作业的输出重定向到日志文件。使用编辑您的crontab文件

crontab -e

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

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

如果一行上有多个命令,用;&&||分隔,则应对每个命令执行上述操作,如下所示:

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

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

0 3 * * * (cmd1;  cmd2)  >> /some/log/file 2>&1

如果您想忽略标准输出并只捕获标准错误,请改为使用> /dev/null 2>> /some/log/file。把日志文件放在任何你想要的地方 – 你的主目录,/var/log,或者甚至/tmp,如果你确定你不需要保留它的话。

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

第七种方法

/dev/null 2>&1添加到cron作业命令的一个副作用是放弃STDERRSTDOUT(标准错误以及输出)。如果您不想从cron发送任何电子邮件,这可以正常工作。但是,如果您希望将错误通过电子邮件发送给您,请改为使用>/dev/nullRead this blog post for more explanation

您仍需要安装MTA(邮件传输代理)才能发送错误电子邮件。 Postfix很简单,可以安装:sudo apt-get install postfix

第八种方法

这是一个古老的问题,但有一个额外的答案在某些情况下很有用。

通过logger管道将cron命令的输出传送到syslog中。

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

示例cron条目:

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

您可以使用您的标签mycmd查看日志:

grep 'mycmd' /var/log/syslog

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/407.html,未经允许,请勿转载。