Як встановити змінну DATE для використання у журналі для виводу crontab?


10

Я грав по-справжньому з деякими варіаціями дати, як-от

DATE = $(date)

але це теж не працювало

кронтаб -е

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

надано лише [КРОН] і НІЧОГО, коли я спробував це = /

Відповіді:


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: Включіть команду дати безпосередньо у свою команду, і, оскільки вся команда передана в оболонку, дата буде оброблена та замінена фактичною датою.

* * * * * /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? (якщо ви використовуєте варіант скрипту, а) не забудьте chmod + x і b) спробуйте спершу самостійно (тобто не через cron))
cyberx86

1
варіант 3 =], я раніше намагався це зробити, але це не відображалось. Але тепер помічаючи, що ти зробив щось ліл диф. чому ви подвоїли $ ($ (DATE))? дивіться моє оновлення вище
qodeninja

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

справедливо. оновив його. давайте спробуємо цього поганого хлопчика! - Хазааа! це працювало lol
qodeninja
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.