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

10

Eu estava tocando 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 gera o texto como está ...

Quero criar uma entrada de log no crontab.log com um carimbo de data / hora em cada atualização

Como posso fazer isso no CentOS 6?

ATUALIZAR

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 = /

qodeninja
fonte

Respostas:

28

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

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

Opção 1: use um script de shell para gerar seu comando, inclua as variáveis ​​e lógicas desejadas - e chame esse script de shell 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 de cadeia no cron e passe-a para o seu comando a ser processado (observe - os sinais de porcentagem não precisam ser escapados e a variável em si é envolvida em $ () para executá-la em um shell separado - backticks devem funcionar da mesma maneira):

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

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

cyberx86
fonte
1
obrigado pelo ótimo feedback +1, tentei adicioná-lo ao crontab, mas fazer isso não funcionou = / nunca renderiza DATEVAR
qodeninja
Acabei de fazer isso em um sistema compatível com RHEL / CentOS6 e deu o resultado esperado (ou seja, adicionamos uma nova linha ao arquivo com a data). Qual opção (das 3 acima) você tentou e qual foi o resultado - seja específico - e houve um erro em / var / log / cron? (se você usar a opção de roteiro, a) não se esqueça de chmod + x e b) experimentá-lo em seu próprio primeiro (ou seja, não através de cron))
cyberx86
1
opção 3 =], eu já havia tentado fazer isso antes, mas não foi processado. Mas agora estou percebendo que você fez algo diferente. por que você dobrou os $ ($ (DATE))? veja minha atualização acima
qodeninja 11/11
1
Você tem um erro de digitação na atualização que adicionou - é $($DATEVAR)não $($(DATEVAR)). Pense desta maneira - $()ou seja, o suporte externo - lança um novo shell para processar o que estiver entre colchetes. Nesse caso, a variável $ DATEVAR é definida como uma sequência e é passada para o shell. $(DATEVAR)não é nada - porque DATEVARnão é nada (ou seja, está faltando um $ para identificá-lo como uma variável). Você também pode usar acentos graves em torno $DATEVARde obter o mesmo resultado
cyberx86
justo. atualizado. vamos tentar esse menino mau! - Hazaaah! funcionou lol
qodeninja 11/12/11