神秘的自动电子邮件

神秘的自动电子邮件

我记得几个月前我曾摆弄过 crontab 并在服务器上设置电子邮件功能,现在我突然收到以下电子邮件:

电子邮件标题:

from:    root <[email protected]>
to:  root
date:    Thu, Dec 5, 2013 at 6:48 AM
subject:     Cron <root@server-ip> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
mailed-by:   gmail.com

电子邮件正文:

/etc/cron.daily/mlocate:
/usr/bin/updatedb.mlocate: `/var/lib/mlocate/mlocate.db' is locked (probably by an earlier updatedb)
run-parts: /etc/cron.daily/mlocate exited with return code 1

这是在 Ubuntu Server 12.04.1 LTS 上。我甚至不知道我正在使用哪个电子邮件服务器,也不知道如何找到它。我对目录的理解/etc/cron.daily一定是错误的,因为当我这样做时crontab -l(对于 root 和我的普通用户),它说没有 crontab。

updatedb也许这是一个与电子邮件或 cron 无关的问题?

编辑:我已经终止了/bin/bash /etc/cron.daily/mlocate/usr/bin/updatedb.mlocate进程并且删除了锁,现在我只需要等待看看是否再次收到错误。

答案1

  1. 如果您指定您使用的操作系统,这确实很有帮助。我猜这是某个 Linux 发行版...
  2. 它正在运行/etc/cron.daily/mlocate并且该脚本有错误,您应该修复它。
  3. 我没有看到其中有任何疑问。

答案2

之前的海报完全没有达到预期效果!

首先,原始发帖者清楚地说明了他使用的操作系统:Ubuntu Server 12.04.1 LTS

其次,它有助于理解 UNIX 类型系统中的系统级进程。系统级 cron 表设置为在定期安排的时间运行日常管理进程。由于 cron 作业没有连接的终端来输出错误消息,因此它们会通过电子邮件发送给 cron-tab 的用户(在本例中为系统管理员)。

第三,您不应该只是关闭这些邮件的电子邮件发送功能,或者关闭 cron 作业的处理功能。它们表明存在问题,您需要解决根本原因。

就此特定消息而言,我在执行涉及 mlocate 的常规升级后也开始收到这些消息。该进程停滞,无法等待 I/O 操作完成。查看进程表:

$ ps -ef |grep mlocate
scott    14564 14416  0 19:49 pts/0    00:00:00 grep mlocate
root     16326 16113  0 Apr06 ?        00:00:00 /bin/bash /etc/cron.daily/mlocate
root     16332 16326  0 Apr06 ?        00:00:00 /usr/bin/updatedb.mlocate

最简单的解决方案就是终止所涉及的进程并让下一个 cron 计划时间稍后再次运行它。

$ sudo kill -9 16326 16332

请注意,这将生成一条新的 cron 消息,因为卡住的进程已被删除,并且 cron 将其视为错误:

From: root@XXXXXXX (Cron Daemon)
To: root@XXXXXXX
Subject: Cron <root@XXXXXXX> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Date: Sun, 08 Apr 2014 19:54:36 -0400 (EDT)

run-parts: /etc/cron.daily/mlocate exited because of uncaught signal 9

这表明您已经解决了所有问题,现在下一个实例应该可以正常工作。

答案3

  1. mlocate 中的问题。
  2. 消息直接从 server-ip 服务器发送。
  3. 转到/var/spool/cron/并执行,对文件中的条目grep -ir MAILTO进行相同检查。MAILTO/etc/crontab
  4. 如果你不想收到来自 crond 的消息,只需删除 MAILTO 字符串
  5. (可能是由较早的更新数据库) <- 如果您今天开始接收消息,那么只需给 mlocate 一些时间来完成服务器上的工作。

相关内容