Я играл с некоторыми вариациями даты, например
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] и НИЧЕГО, когда я это пробовал = /
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
(Во всех вышеперечисленных случаях вы, конечно, можете использовать переменную для пути к журналу вместо его «жесткого кодирования».)
Проблема в том, что cron
использует знак процента как специальный символ. Вы должны процитировать его, чтобы он игнорировался cron
, но не оболочкой. Как и большинство людей, которых я видел, которые час за часами возились с тем, когда, как и где что цитировать, я тоже прошел через эту хитрость.
Вот решение, которое я нашел, которое работает со всеми разновидностями * nix:
# Define the percent sign in a variable.
P=%
#
# Now use it in a $() subshell. Don't get freaked about the double quotes
# inside the $(), they are processed by the subshell.
57 2 * * * root /bin/echo "[CRON] at $(date "+${P}d-${P}b${P}Y")" 1>>/tmp/crontab.log 2>&1
Как гласит старая поговорка в мире Perl: всегда есть несколько способов сделать это. Я не говорю, что это единственный или лучший способ - я говорю, что это работает для записей crontab, работающих в CentOS, Debian, Ubuntu, Mac и AIX, так что это то, чего я придерживаюсь.