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

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

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

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

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

对我来说阻止这种情况发生的最好方法是什么? 我希望能够删除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/ 

在我的情况下,我更换了

  

用“根”。

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

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

 MAILTO="" 

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

如果您不想安装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 * * * 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如果您确定不需要保留它。

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

/dev/null 2>&1到cron作业命令的一个副作用是它将丢弃STDERRSTDOUT (标准错误以及输出)。 如果您不想要来自cron的任何电子邮件,这可以正常工作。 但是如果您希望通过电子邮件将错误发​​送给您,请使用>/dev/null 。 阅读此博客文章以获取更多解释 。

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

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

通过logger cron命令的输出,使它们最终出现在syslog中。

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

示例cron条目:

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

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

 grep 'mycmd' /var/log/syslog 

您可以在crontab文件的开头设置MAILTO=””变量。 这也将禁用电子邮件警报。 编辑/打开您的cron作业:

 $ crontab -e 

在文件顶部,输入:

 MAILTO="" 

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/

我使用Kitematic Docker工具遇到了这个问题。
转到magento容器并单击exe

然后跑

 apt-get update 

如果你想让magento在kitematic上运行,那就是这样。 日志将在虚拟机上显示此错误:

需要更新。

对不起,如果这让你输了,但这就是它的工作原理。 你一直迷路,但只是阅读它,有一天这些碎片会聚集在一起。 耐心点。

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

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

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

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

     mail