Команда Crontab не выполнена

578
Irvin Denzel Torcuato

У меня есть команда в моем crontab, которая не выполняется правильно, это должно делать резервную копию базы данных каждый день в указанное время. Я попытался запустить команду в моем терминале и работает правильно.

Для редактирования моего crontab я использую crontab -eтекущую вкладку cron, которая содержит следующее:

# Save online agent status every 2 minutes */2 * * * * /usr/bin/python /home/dummy/scm/qt-savu/userstatus.py >> /home/dummy/qt-savu/userstatus.log  # Save Hourly call counts every XX:59 59 * * * * /usr/bin/python /home/dummy/scm/qt-savu/hourlylog.py >> /home/dummy/qt-savu/hourlycc.log  # Backup albatross everyday 58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz  # Backup bert everyday 58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz 

Другие команды в crontab работают правильно. Команды, которые не работают:

# Backup albatross everyday 58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz  # Backup bert everyday 58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz 

Вывод журнала выглядит следующим образом

Sep 4 05:56:01 luna CRON[18815]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+) Sep 4 05:56:01 luna CRON[18812]: (CRON) info (No MTA installed, discarding output) Sep 4 05:56:01 luna CRON[18817]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+) Sep 4 05:56:01 luna CRON[18813]: (CRON) info (No MTA installed, discarding output) 

Как я заметил, вывод журнала останавливается на /bin/date.

2
Я бы порекомендовал вам поместить команды в сценарии оболочки, а затем вызывать их, чтобы crontab был простым для чтения. albal 8 лет назад 1
спасибо за совет, не увеличивает ли это сложность? Irvin Denzel Torcuato 8 лет назад 0
Нет, это не увеличивает сложность. Это на самом деле упрощает управление, если вы спросите меня. Таким образом, crontab simple управляет, когда задачи выполняются, и тогда задачи в сценариях оболочки могут быть настолько простыми или сложными, насколько это необходимо. Проблема с добавлением встроенных команд в crontab иногда заключается в синтаксических проблемах, вызванных переполнением однострочников в этом формате, которые на самом деле вызывают дополнительные головные боли. JakeGould 8 лет назад 0

1 ответ на вопрос

4
alienth

% is treated specially by cron. It is used to denote the end of the command portion and the beginning of standard input. As such, you must escape it, like so: \%.

From the crontab man page:

The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file.

Бог послал, был обеспокоен этим больше часа ... есть ли список специальных символов на страницах руководства? Это объясняет странную подсветку синтаксиса - (правка) Irvin Denzel Torcuato 8 лет назад 0
На man-странице (`man 5 crontab`) шестое поле имеет только один специальный символ. alienth 8 лет назад 0
@IrvinDenzelTorcuato Также - как обсуждалось в комментариях к вашему первоначальному вопросу - вот почему настоятельно рекомендуется, чтобы записи в crontab просто вызывали скрипт, а затем выгружали всю основную логику в автономный скрипт. В этом случае я вполне уверен, что проблема будет решена с помощью отдельного скрипта. Не сказать, что этот ответ неправильный - он правильный - но он также показывает подводные камни, приводящие к ошибкам в написании скриптов оболочки в командах crontab. JakeGould 8 лет назад 0

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