Синтаксическая ошибка только при выполнении команды из 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...
Может ли кто-нибудь посоветовать мне, что я там делаю не так?
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, а затем при необходимости измените путь.
Comments