Как установить переменную DATE для использования в журнале для вывода crontab?


10

Я играл в Aroudn с некоторыми вариациями даты, как

DATE = $(date)

но это тоже не сработало

crontab -e

CRONLOG=/tmp/log/crontab.log
DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
* * * * * echo $DATEVAR >> /tmp/log/crontab.log
*/2 * * * * echo "$DATEVAR hello" >> ${CRONLOG}
*/1 * * * * echo 'every minute' >> ${CRONLOG}

это просто выводит текст как есть ...

Я хочу создать запись в журнале crontab.log с отметкой времени для каждого обновления

Как я могу сделать это на CentOS 6?

ОБНОВИТЬ

DATEVAR=date +20%y%m%d_%H%M%S
*/1 * * * * /bin/echo [CRON] $($(DATEVAR)) >> /tmp/log/crontab.log

рендерил только [CRON] и НИЧЕГО, когда я попробовал это = /

Ответы:


28

Cron не является оболочкой - он не разбирает команды так же, как оболочка. Таким образом, ваша переменная назначается как статический текст.

Я знаю три решения этой проблемы:

Вариант 1. Используйте сценарий оболочки для генерации вашей команды, включите все переменные и логику, которые вы хотите, и вызовите этот сценарий оболочки из cron.

* * * * * /path/to/myscript.sh

myscript.sh:

DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
echo $DATEVAR >> /tmp/crontab.log

Вариант 2. Включите команду date непосредственно в вашу команду, и, поскольку вся команда передается в оболочку, дата будет обработана и заменена фактической датой.

* * * * * /bin/echo `date +20\%y\%m\%d_\%H\%M\%S` >> /tmp/crontab.log

Вариант 3: Установите строковую переменную в cron и передайте ее вашей команде для обработки (обратите внимание - знаки процента не нужно экранировать, а сама переменная заключена в $ () для ее выполнения в отдельной оболочке - галочки должны работать одинаково):

DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

(Во всех вышеописанных случаях вы, конечно, можете использовать переменную для пути к журналу, а не «жестко кодировать» ее.)


1
спасибо за отличный отзыв +1, я пытался добавить его в crontab, но это не сработало = / он никогда не отображает DATEVAR
qodeninja

Я просто сделал это на RHEL / CentOS6-совместимой системе, и это дало ожидаемый результат (т.е. добавил новую строку в файл с датой). Какой вариант (из 3 приведенных выше) вы попытались и каков был конкретный результат, и была ли ошибка в / var / log / cron? (если вы используете опцию script, a) не забудьте chmod + x и b) сначала попробуйте самостоятельно (т.е. не через cron))
cyberx86

1
вариант 3 =], я пытался сделать это раньше, но он не рендер. Но теперь я замечаю, что ты сделал что-то маленькое. почему вы удвоили $ ($ (DATE))? см. мое обновление выше
qodeninja

1
У вас есть опечатка в обновлении, которое вы добавили - это $($DATEVAR)не так $($(DATEVAR)). Подумайте об этом так - $()то есть внешняя скобка - запускает новую оболочку для обработки всего, что находится в скобках. В этом случае переменная $ DATEVAR устанавливается в строку и передается в оболочку. $(DATEVAR)ничего - потому что DATEVARничто (т. е. отсутствует $, чтобы идентифицировать его как переменную). Вы также можете использовать обратные $DATEVAR
пометки,

справедливо. обновил его. давай попробуем этого плохого мальчика! - Хазаааа! это сработало LOL
Qodeninja
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.