Синтаксическая ошибка только при запуске команды из cron - PullRequest
2 голосов
/ 23 июля 2010

Эта команда:

/usr/bin/mysqldump --add-drop-table -u myuser -pmypass mydb > "/home/myuser/dbBackups/"`date +%Y%m%d`".sql"

отлично работает из командной строки, но когда cron запускает его, я получаю

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Команда также находится в одной строке в crontab, так что я смущен ссылками на строки 0 и 1 ...

Может кто-нибудь посоветовать мне, что я там делаю не так?

Ответы [ 3 ]

5 голосов
/ 23 июля 2010

Это очевидный тупой вопрос, но у вас есть соответствующая обратная кавычка в вашем crontab (crontab -l)?

Первая строка, строка с нулем не относится к строкам в crontab, толькок «строкам» в однострочном скрипте.

Обновлено:

Ах, думаю, я понял.Это из crontab (5):

Percent-signs (%) in the command, unless escaped with backslash (\),
will be changed into newline characters, and all data after the
first % will be sent to the command as standard input.

Таким образом, символы процента в вашей спецификации даты интерпретируются как символы новой строки, что означает, что обратная кавычка не заканчивается перед новой строкой, что приведет к вашему сообщению об ошибке.

Так что избегайте процентов символов.Я забыл это о crontab ....

4 голосов
/ 23 июля 2010

Самое простое решение - это, вероятно, поместить всю команду в скрипт оболочки и просто запустить ее.Поэтому создайте файл scriptName.sh, который содержит указанную вами команду, и пусть crontab вызовет этот скрипт.Это обходит все эти странные проблемы.

1 голос
/ 23 июля 2010

Команды, выполняемые из cron, не имеют доступа к переменным окружения из вашей оболочки входа, включая путь.Поэтому попробуйте следующее (добавив полный путь к дате):

/usr/bin/mysqldump --add-drop-table -u myuser -pmypass mydb > "/home/myuser/dbBackups/"`/usr/bin/date +%Y%m%d`".sql"

Конечно, проверьте, находится ли ваша команда date в другом месте, запустив which date, затем при необходимости измените путь.

...