“(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作业命令的一个副作用是它将丢弃STDERR
和STDOUT
(标准错误以及输出)。 如果您不想要来自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上运行,那就是这样。 日志将在虚拟机上显示此错误:
需要更新。
对不起,如果这让你输了,但这就是它的工作原理。 你一直迷路,但只是阅读它,有一天这些碎片会聚集在一起。 耐心点。
-
首先,安装
postfix
,可以解决问题sudo apt-get install postfix
-
如果是Ubuntu,则可以编辑
crontab
文件sudo vim /etc/crontab
-
注意,编辑顶部文件,而不是第一行中的任何代码,然后输入
MAILTO=root // current system user
-
当
cron
执行任何任务时,您将收到一封电子邮件mail