我重新安装了Ubuntu 12.04.1 LTS和许多服务器。
我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,大约在同一时间,对于每台计算机,在高峰时,我的系统日志中都有75%的CPU高峰和以下信息:
CRON[8380]: (CRON) info (No MTA installed, discarding output)
我已经安装了mono-complete,并且正在运行服务堆栈Web服务器。
我阻止这种情况发生的最佳方法是什么?我希望能够消除CPU峰值。
我重新安装了Ubuntu 12.04.1 LTS和许多服务器。
我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,大约在同一时间,对于每台计算机,在高峰时,我的系统日志中都有75%的CPU高峰和以下信息:
CRON[8380]: (CRON) info (No MTA installed, discarding output)
我已经安装了mono-complete,并且正在运行服务堆栈Web服务器。
我阻止这种情况发生的最佳方法是什么?我希望能够消除CPU峰值。
Answers:
Linux使用邮件将通知发送给用户。大多数Linux发行版都安装了邮件服务(包括MTA)。Ubuntu没有。
您可以安装邮件服务(例如postfix)来解决此问题。
sudo apt-get install postfix
或者您可以忽略它。我认为cron无法发送消息与CPU峰值无关(这与cron正在运行的基础作业有关)。安装MTA然后阅读消息可能是最安全的(这mutt是一个很好的系统邮件阅读器)。
mail由mailutils(debian)提供的,如果在postfix中内置了更好的方法?
发生这种情况是因为您的cron作业正在产生输出,然后cron守护程序尝试通过电子邮件将该输出发送给您(即root)。如果不需要该输出,解决此问题的最简单方法是在crontab上将其丢弃:
sudo crontab -e
并添加>/dev/null 2>&1到每个工作中:
* * * * * yourCommand >/dev/null 2>&1
No MTA installed, discarding output在日志中看到一堆消息,程序最终停止自行运行。我相信是因为CPU峰值。看来针对该问题发布的所有答案似乎都忽略了这一点。
logger。例如,yourCommand >/dev/null 2>&1 | logger -t mycmd。这会将输出放在syslog中,以确保安全,并停止MTA投诉。
如先前的回答所述,这是因为您的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
然后在作业运行后查看日志文件。
如果您不想安装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命令的输出,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
添加/dev/null 2>&1到cron job命令的一个副作用是,它将丢弃STDERR和STDOUT(标准错误以及输出)。如果您不希望来自cron的任何电子邮件,此方法效果很好。但是,如果您希望将错误通过电子邮件发送给您,请>/dev/null改用。阅读此博客文章以获得更多解释。
不过,您仍然需要安装MTA(邮件传输代理)来发送错误电子邮件。Postfix非常简单,可以通过以下方式安装:sudo apt-get install postfix
您可以MAILTO=””在crontab文件的开头设置变量。这也将禁用电子邮件警报。编辑/打开您的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上运行。日志将在虚拟机上显示此错误:
需要更新。
抱歉,这让您迷路了,但这就是它的工作原理。您一直在迷路,但是只要阅读一下,这些碎片就会有一天在一起。耐心一点。