Синтаксическая ошибка только при выполнении команды из cron



Эта команда:

/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...

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

3 ответов:

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

Это очевидный глупый вопрос, но есть ли у вас соответствующая обратная цитата в вашем 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.

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

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

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

/usr/bin/mysqldump --add-drop-table -u myuser -pmypass mydb > "/home/myuser/dbBackups/"`/usr/bin/date +%Y%m%d`".sql"
Конечно, проверьте, находится ли ваша команда date в другом месте, выполнив команду which date, а затем при необходимости измените путь.
    Ничего не найдено.

Добавить ответ:
Отменить.