Назад | Перейти на главную страницу

Cron запускает мой скрипт, но скрипт ничего не делает, что-то связано с ошибкой почты ??? «Получил статус 0x004b # 012»

У меня очень странная проблема с одним из администрируемых мной веб-серверов Ubuntu 10.10.

Я написал сценарий с использованием ruby ​​и rake для запуска некоторых команд tar и выполнения mysqldump баз данных. Я установил запись в crontab для пользователей root, например:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything'

Это отлично работает на одном из серверов. Однако с другой стороны, похоже, что это не выполняет то, что в моем сценарии.

Я знаю, что это называется определенно, потому что, когда я бегу

grep CRON /var/log/syslog

он возвращает:

Mar 22 12:00:01 ServerName CRON[10273]: (root) CMD (/bin/bash -l -c 'cd /my/script/path && rake backup:everything')

Однако это определенно не то, что в этом сценарии.

Когда я напрямую запускаю сценарий следующим образом:

cd /my/script/path && sudo rake backup:everything

Работает отлично.

Также я сделал это в crontab обоих серверов:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

(как и в сценарии, я время от времени делаю "создает резервную копию папки x")

На сервере, где работает задание cron, он создает файл output.txt и помещает туда ожидаемый результат, например «Начало резервного копирования» и т. Д.

Однако на сервере, где он не работает, он только создает файл, но оставляет его пустым. Но когда я снова копирую команду из системного журнала и запускаю ее вручную:

sudo /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

Он работает нормально, и результат такой, как ожидалось.

Возможно, я сейчас хватаюсь за соломинку, но может ли это быть как-то связано с этим:

CRON[10271]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)

Это появляется в системном журнале после каждый вызов cron. На самом деле у меня есть только это задание cron и еще одно небольшое задание для обновления системных часов, но, судя по всему, ни одно из них не работает правильно.

Неправильная конфигурация почты убивает мои задания cron? Это вообще возможно?

Вы должны указать полный путь к рейку в строке cron. Что-то вроде:

/sbin/rake или где бы он ни жил.

Если путь, по которому живет грабля, не находится в пути пользователя root, он не сможет работать.

Если это почта, вы должны что-то увидеть в журнале почты. Проверить там.

Когда вы имеете дело с cron, всегда учитывайте переменные среды. Вам лучше запустить сценарий bash, который импортирует переменные среды (источник), и выполнить вашу команду.