Como você define uma variável DATE para usar em um log de saída do crontab?

6

Eu estava jogando aroudn com algumas variações de data como

DATE = $(date)

mas isso também não funcionou

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}

isso apenas mostra o texto como está ...

Eu quero criar uma entrada de log no crontab.log com um timestamp em cada atualização

Como posso fazer isso no CentOS 6?

UPDATE

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

processado apenas [CRON] e NADA quando tentei = /

    
por qodeninja 11.12.2011 / 01:35

1 resposta

20

Cron não é um shell - ele não analisa os comandos da mesma maneira que um shell. Assim, sua variável é atribuída como se fosse um texto estático.

Existem três soluções que conheço para este problema:

Opção 1: Use um script shell para gerar seu comando, inclua todas as variáveis e lógicas desejadas - e chame esse script de shell a partir do cron.

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

myscript.sh:

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

Opção 2: Inclua o comando date diretamente em seu comando e, como todo o comando é passado para o shell, a data será processada e substituída por uma data real.

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

Opção 3: Defina a variável string no cron e passe-a ao seu comando para ser processada (note - os sinais de porcentagem não precisam ser escapados, e a própria variável é envolvida em $ () para executá-la em um shell separados - os backticks devem funcionar da mesma forma):

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

(Em todos os casos acima, você pode, é claro, usar uma variável para o caminho do log, em vez de 'codificar').

    
por 11.12.2011 / 02:30