У меня определены следующие задания cron.
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > /home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s 'Events from `date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`' -a '/home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv'
Кажется, он работает правильно, если я запускаю приведенную выше команду непосредственно из командной строки. Но когда я проверил выполнение скрипта этим утром, я получил электронное письмо с сообщением (я перефразирую, потому что я случайно удалил их), что обратные галочки не были закрыты должным образом.
command-line
cron
Марк Д
источник
источник
/bin/sh: 1: Syntax error: EOF in backquote substitution
Для первой работы cron./bin/sh: 1: Syntax error: Unterminated quoted string
Для второй работы cron.$(...)
поможет вам справиться с проблемами цитирования ...Ответы:
Я настоятельно рекомендую помещать любые нетривиальные задания cron в свой собственный файл сценария оболочки по многим причинам:
источник
%
в сценарий проблемных персонажей не позволитcron
превращать их в новые строки, что является вашей реальной проблемой.Команды заданий cron ведут себя по-разному по сравнению с командами, введенными непосредственно в интерактивную оболочку, в грубом порядке:
$PATH
, а другие ожидаемые переменные отсутствуют./bin/sh
по умолчанию, тогда как вы можете использовать какую-то другую оболочку в интерактивном режиме.%
персонажа специально (он превращается в новую строку в команде).Вы должны предшествовать всем
%
символам\
в файле crontab с символом a , который говорит cron просто ввести процент в команду. Помните об этом, когда вы используетеdate
команду в задании cron.Я также исправил некоторые проблемы с цитированием:
$(…)
вместо этого: его правила разбора проще."$somevariable"
,"$(somecommand)"
. Здесь отсутствие кавычек было безобидным, потому чтоdate
команда никогда не возвращала никаких специальных символов для используемых вами форматов, но вы должны тщательно помнить, какие символы являются специальными, и проверять это каждый раз, когда оставляете подстановку без кавычек. Проще говоря, всегда используйте двойные кавычки, если вы не хотите, чтобы в результате происходило разбиение поля и генерация имени файла.источник
Вы, кажется, вложили
'
вmutt
команду:Попробуйте использовать
"
вместо внутреннего,'
чтобы оператор читалисточник