2010-07-22 2 views
3

Эта команда:Синтаксическая ошибка при запуске команды из cron'а

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

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

/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 ссылки ...

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

+0

Когда вы работаете из командной строки, используете ли вы ту же оболочку, что и cron (/ bin/sh)? –

+0

Упоминание, какой unix был бы полезен. Единственная вещь, которую я могу угадать из доступной информации, заключается в том, что ваша оболочка входа не может быть/bin/sh, поэтому попробуйте запустить/bin/sh, а затем запустите свою команду. О, также проверяйте, чтобы у вас не было символа табуляции вместо места в нем случайно - cron может смутить это. – LeBleu

+0

Ах! Я бегу bash, а cron - нет. Любое понятие о том, какой правильный синтаксис backtick находится в/bin/sh? Я действительно знаком с башем. Сервер - это Linux. – jerrygarciuh

ответ

4

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

+0

Спасибо, это сделал трюк! – jerrygarciuh

+0

Я пробовал в течение часа, чтобы cron запустил .sh, и все, что я получаю, это «Синтаксис: недействительный синтаксис». Кровавый Linux! – 2012-03-05 10:06:06

1

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

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

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

+0

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

5

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

Строка 1, строка нулевой материал не относится к строкам в 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 ....

+0

Конечно; cmd выше - это точно минус фактическое имя un/pw/db. – jerrygarciuh

Смежные вопросы