Intereting Posts
требуется руководство по книгам Linux и Unix Включено автостекло, блокировка связки ключей VNC-соединения Не удалось загрузить операционную систему Как определить, что ZCACHE работает на моем ящике? Как подключить виртуальную машину CentOS (на VMware) к Интернету? Эфемерный порт: что это такое и что он делает? Что такое безопасный и переносимый способ разделить строку в программировании оболочки? Какие функции находятся в zsh и отсутствуют в bash, или наоборот? Как заставить Portage всегда выбирать установку и обновление до последней доступной версии выбранного программного обеспечения? Linux Mint 17.3 и Ubuntu 15.10 Оба замораживания после загрузки в режиме реального времени USB Могу ли я предотвратить «Отключить тачпад при наборе текста» от воздействия на движения мыши? Почему оболочка Command Substitution сжимает конечный символ новой строки? xbindkeys && xdotool => спонтанные отключения кнопок мыши Проблема разрешения Crontab Как заставить «xargs» игнорировать выход ребенка и продолжить обработку

Как я могу выполнить «дату» внутри задания вкладки cron?

Я хочу создать файл журнала для скрипта 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 может быть завершен: