Что не так с моей конфигурацией cron.hourly?

Каждый час я получаю электронное письмо с такой ошибкой,

Subject: Cron <root@supa> root    cd / && run-parts --report /etc/cron.hourly

/bin/sh: root: not found

Содержимое / etc / crontab выглядит следующим образом: либо я удаляю пользователя «root», либо нет (6-й столбец), я получаю та же ошибка.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
11 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

В моем каталоге cron.hourly есть два файла,

$ ll /etc/cron.hourly/
total 0
lrwxrwxrwx 1 root root 25 2009-10-29 09:24 ntpsync -> /home/<user>/bin/ntpsync
lrwxrwxrwx 1 root root 28 2009-10-23 10:33 foo -> /home/<user>/bin/foo

Первый скрипт выглядит следующим образом:

$ cat ~/bin/ntpsync
#!/usr/bin/env bash
echo "user: $USER"
if [[ "$USER" == "root" ]] ; then
    ntpdate ntp.ubuntu.com
else
    sudo ntpdate ntp.ubuntu.com
fi

Даже я удаляю оба скрипта в моем / etc /cron.hourly/, я получаю одно и то же сообщение об ошибке каждый час. Я попытался перезапустить cron, и я все еще получаю то же сообщение об ошибке. Следующая идея, которую я имею, состоит в том, чтобы перезагрузить компьютер, но я бы избежал этого.

$ sudo /etc/init.d/cron restart

Моя версия Ubuntu выглядит следующим образом:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.1"

Обновление: Я удалил шестой столбец «root» из моего файла / etc / crontab ранее, потому что когда я искал онлайн кто-то упомянул, что может решить проблему. Теперь я думаю, что проблема заключалась в том, что я возился с конфигурацией системного crontab вместо конфигурации root.

$ sudo crontab -l
# m h  dom mon dow   command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
6
задан 26 August 2010 в 03:55

5 ответов

Файл crontab по умолчанию из пакета cron (3.0pl1-100ubuntu2.1, это последняя версия ubuntu 8.04) выглядит следующим образом:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Вы должны просто взять это и вставить это в файл, но вы также можете убедиться, что у вас установлена ​​последняя версия пакета. Вы можете сделать это, выполнив:

apt-get update
apt-get install cron

Обновление:

Существует два различных типа crontab: один из них - системный crontab, который находится в /etc/crontab. Этот crontab имеет следующий код:

minute hour dayOfMonth month dayOfWeek userToRunAs restOfLineIsCommand

Другой тип - это пользовательский crontab, который можно изменить с помощью crontab. Фактическая конфигурация находится в /var/spool/cron/crontabs/USERNAME и всегда выполняется как пользователь, которому она принадлежит, и таким образом формат этого файла:

minute hour dayOfMonth month dayOfWeek restOfLineIsCommand
0
ответ дан 26 August 2010 в 03:55

Сделай это:

# crontab -r

И НЕ делай этого :

# crontab /etc/crontab

Вместо этого редактирует файл [ 112] / etc / crontab вручную.

0
ответ дан 26 August 2010 в 03:55

Ваш /etc/crontab выглядит действительно смешно. На самом деле каждая строка должна иметь пользовательский столбец, что является самой забавной частью. Например, мой читает:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Кстати, обычно не очень хорошая идея трогать этот файл. Если вам нужно добавить больше общих crontabs, используйте /etc/cron.d для этого. Вы можете попытаться восстановить конфигурацию по умолчанию для пакета cron с помощью:

$ sudo apt-get install --reinstall --yes -o DPkg::Options::=--force-confmiss -o DPkg::Options::=--force-confnew cron

и посмотреть, исправит ли она проблему.

0
ответ дан 26 August 2010 в 03:55

Я знаю, что вы сказали, что по-прежнему получаете ошибки после удаления «корня» в шестом столбце, но это действительно похоже на проблему.

Например, посмотрите на другие строки. Все они начинаются с «теста». Это не пользователь, это начало команды. Удаление «root» заставит вашу команду начинаться с «cd».

Тем более, что в сообщении об ошибке говорится, что он не может найти «root», то есть ошибку, которую вы получаете, когда пытаетесь запустить программу, которая не существует.

Так что я бы сказал, попробуйте удалить это снова.

0
ответ дан 26 August 2010 в 03:55

Здесь действительно две проблемы. Один (более очевидный) - неправильный 6-й столбец в личном crontab пользователя root. Второе молчание - когда-либо команда после часовой строки хрон в /etc/crontab не выполняется должным образом. Ниже приведены исправления:


Вы можете удалить файл crontab фиктивного пользователя, выполнив sudo crontab -r


. После этого вам нужно добавить пользователя root в /etc/crontab файл для каждой строки после ежечасной строки cron - примерно так:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
11 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Это должно решить проблемы с электронной почтой.

0
ответ дан 26 August 2010 в 03:55

Другие вопросы по тегам:

Похожие вопросы: