我记得几个月前我曾摆弄过 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
- 如果您指定您使用的操作系统,这确实很有帮助。我猜这是某个 Linux 发行版...
- 它正在运行
/etc/cron.daily/mlocate
并且该脚本有错误,您应该修复它。 - 我没有看到其中有任何疑问。
答案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
- mlocate 中的问题。
- 消息直接从 server-ip 服务器发送。
- 转到
/var/spool/cron/
并执行,对文件中的条目grep -ir MAILTO
进行相同检查。MAILTO
/etc/crontab
- 如果你不想收到来自 crond 的消息,只需删除 MAILTO 字符串
- (可能是由较早的更新数据库) <- 如果您今天开始接收消息,那么只需给 mlocate 一些时间来完成服务器上的工作。