
Помню, как много месяцев назад я возился с 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?
EDIT: Я завершил /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. Процесс застопорился и не смог завершиться, ожидая завершения операции ввода-вывода. Взгляните на таблицу процессов:
$ 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 еще немного времени для завершения работы на сервере.