我没有在这些服务器上添加任何cron作业或编辑我的crontab,但是,对于每台计算机而言,我几乎同时,在出现峰值时,我的系统日志中出现75%的CPU峰值和以下信息:
CRON[8380]: (CRON) info (No MTA installed, discarding output)
我已经安装了单完整版,并且正在运行服务堆栈Web服务器。
对我来说,阻止这种情况发生的最佳方法是什么?我希望能够消除CPU峰值。
#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
的一个副作用是,它将丢弃STDERR
和STDOUT
(标准错误和输出)。如果您不希望来自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上运行。日志将在虚拟机上显示此错误:
需要更新。
很抱歉,如果您迷路了,那是它的工作方式。您一直在迷路,但是只要阅读一下它,碎片便有一天会在一起。要有耐心。
评论
每天6:25?这些是来自/etc/cron.daily/的脚本。我只有一种尝试发送邮件的方式:人气竞赛。查看您的脚本,看看哪个脚本正在尝试发送邮件?那应该缩小范围。然后使用“ chmod 0644 /etc/cron.daily/script-name”以防止执行。