Я хочу создать файл журнала для скрипта cron, который имеет текущий час в имени файла журнала. Это команда, которую я пытался использовать:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
К сожалению, я получаю это сообщение, когда это выполняется:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``' /bin/sh: -c: line 1: syntax error: unexpected end of file
Я попытался вырваться из части date
разными способами, но без большой удачи. Возможно ли, чтобы это произошло в строке в файле crontab или мне нужно создать сценарий оболочки для этого?
Попробуй это:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+\%d"`.log
Обратите внимание на обратную косую черту, пропускающую знак %
.
Сообщение об ошибке предполагает, что оболочка, которая выполняет вашу команду, не видит второго символа обратного тика:
/ bin / sh: -c: строка 0: неожиданный EOF при поиске соответствия “ '
Это также подтверждается вторым сообщением об ошибке, которое вы получили, когда вы попробовали один из других ответов:
/ bin / sh: -c: строка 0: неожиданный EOF при поиске соответствия `) '
Справочная таблица crontab подтверждает, что команда считывается только до первого неэкранированного знака %
:
Поле «шестое» (остальная часть строки) указывает команду для запуска. Вся командная часть строки, вплоть до символа новой строки или%, будет выполнена / bin / sh или оболочкой, указанной в переменной SHELL файла cron. Процентные знаки (%) в команде, если не сбрасываются с помощью обратного слэша (\), будут изменены на символы новой строки, а все данные после первого% будут отправлены команде в качестве стандартного ввода.
Вы также можете поместить свои команды в файл оболочки, а затем выполнить файл оболочки cron.
jobs.sh
echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
хрон
0 * * * * sh jobs.sh
Если вы хотите, чтобы строка форматирования даты была переменной (чтобы избежать дублирования всей строки), НЕ ВЫЙДИТЕ %
и НЕ помещайте ее в $()
Например, объявив строку, просто напишите:
DATEVAR=date +%Y%m%d_%H%M%S
Затем напишите оператор cron с $($VARIABLE_NAME)
следующим образом:
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log
Благодаря cyberx86 его / ее ответ на ServerFault может быть завершен: