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

我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,对于每台计算机而言,我几乎同时,在出现峰值时,我的系统日志中出现75%的CPU峰值和以下信息:

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


我已经安装了单完整版,并且正在运行服务堆栈Web服务器。

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

评论

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

#1 楼

Linux使用邮件将通知发送给用户。大多数Linux发行版都具有包含MTA(邮件传输代理)的邮件服务。 Ubuntu不会。

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

sudo apt-get install postfix


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

评论


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

– Endolith
13年11月26日在4:34

postfix是Linux上使用最广泛的邮件服务器,请坚持使用

–拉普利·安德拉斯(RápliAndrás)
2014年12月3日17:03



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

– steffen
17-10-27在10:16



我知道检查邮件的唯一方法是mailutils(debian)提供的邮件,如果后缀内置了更好的方法?

–雷神召唤师
19年6月15日在17:30

使用更简单的MTA可以是msmtp-mta(通常与msmtp本身一起使用)。

– pyrsmk
2天前

#2 楼

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

sudo crontab -e


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

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


评论


这种方法的问题在于它不能解释高CPU使用率。 Cron显然正在尝试进行交流,这实际上只是在忽略输出。万一有有用的调试信息,我会比丢弃它更倾向于处理输出。

–奥利♦
2014年1月2日14:39

Oli,即使这是一个老问题,我也遇到了同样的问题,但它在Raspberry PI上。我看到一堆没有安装MTA的设备,在日志中丢弃了输出消息,并且我的程序最终停止了自己的运行。我相信是因为CPU峰值。看来针对该问题发布的所有答案似乎都忽略了这一点。

– ThN
17年1月18日在15:37

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

– CivMeierFan
18年2月13日在0:03



@rob:隐藏输出不是解决方法。

– pyrsmk
2天前

对于阅读@CivMeierFan的评论的人-请勿在其中添加> / dev / null :)有关更多详细信息,请参阅Michael Hunter的答案。

–纳赫特
昨天



#3 楼

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

我建议运行:

sudo aptitude install postfix


我在安装过程中以及再次运行cron作业后选择了“本地”:
>
sudo tail -f /var/mail/<user>


带有“ root”。

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

评论


感谢您对如何检查邮箱以查看作业中的错误的额外评论!

– Stuart Allen
16年12月14日在14:08

#4 楼

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

crontab -e
编辑您的crontab文件

(如果问题出在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


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

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

#5 楼

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

MAILTO=""


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

评论


不要在MAILTO =“”之后添加任何注释(#),否则将无法正常工作

– SBF
18-3-29在9:33



#6 楼

如果您不想安装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中看到该消息的任何服务器上所做的事情

评论


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

–杉木
17年8月6日在19:18

您确定cron作业正在运行吗?

–安德鲁·麦克诺顿(Andrew MacNaughton)
17年8月7日在20:15

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

–杉木
17年8月7日在21:14

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

–马特·史密斯(MattSmith)
17年12月4日,0:33

#7 楼

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

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

比安装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
18年2月13日在0:05

这对我来说非常合适。日志可通过journalctl获得。

– Pavel Prischepa
19/12/27在4:33

#8 楼

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

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

评论


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

–坑
2014年2月5日,12:31

afaik,除了将输出发送到电子邮件之外,没有其他方法可以记录输出。您可以执行的最接近的操作是为本地邮件传递设置postfix(如果运行“ sudo apt-get install postfix”,则会提示您是否要设置本地传递。虽然这看上去很麻烦,但实际上确实有效好多了,每当我通过ssh登录时,如果以前的作业失败,我都会在计算机上看到一封新的电子邮件,我发现它比检查日志更方便。

–paneer_tikka
2014年2月7日下午4:32

#9 楼

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

$ crontab -e


在文件顶部,输入:

MAILTO=""


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

#10 楼



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

sudo apt-get install postfix



如果是Ubuntu,则可以编辑crontab文件

sudo vim /etc/crontab



注意,编辑顶部文件,第一行中没有任何代码,然后输入

MAILTO=root // current system user



cron执行任何任务时,您会收到一封电子邮件

mail




评论


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

– zx485
18/09/19在17:00

#11 楼

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

然后运行

apt-get update


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


需要更新。


很抱歉,如果您迷路了,那是它的工作方式。您一直在迷路,但是只要阅读一下它,碎片便有一天会在一起。要有耐心。