Come si imposta una variabile DATE da utilizzare in un registro per l'output di crontab?


10

Stavo giocando aroudn con alcune variazioni di data come

DATE = $(date)

ma neanche quello ha funzionato

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}

questo emette semplicemente il testo così com'è ...

Voglio creare una voce di registro in crontab.log con un timestamp su ogni aggiornamento

Come posso fare questo su CentOS 6?

AGGIORNARE

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

reso solo [CRON] e NIENTE quando l'ho provato = /

Risposte:


28

Cron non è una shell - non analizza i comandi nello stesso modo di una shell. Pertanto, la variabile viene assegnata come se fosse un testo statico.

Esistono tre soluzioni che conosco per questo problema:

Opzione 1: usa uno script di shell per generare il tuo comando, includi le variabili e la logica che desideri - e chiama quello script di shell da cron.

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

myscript.sh:

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

Opzione 2: includere il comando date direttamente nel comando e, poiché l'intero comando viene passato alla shell, la data verrà elaborata e sostituita con una data effettiva.

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

Opzione 3: imposta la variabile stringa in cron e passala al tuo comando per essere elaborata (nota: i segni di percentuale non devono essere sottoposti a escape e la variabile stessa è racchiusa in $ () per eseguirla in una shell separata - i backtick dovrebbero funzionare allo stesso modo):

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

(In tutti i casi precedenti, è possibile, ovviamente, utilizzare una variabile per il percorso del registro, anziché "codificarlo").


1
grazie per l'ottimo feedback +1, ho provato ad aggiungerlo al crontab ma farlo non ha funzionato = / non rende mai DATEVAR
qodeninja l'

L'ho appena fatto su un sistema compatibile RHEL / CentOS6 e ha dato il risultato atteso (ovvero ha aggiunto una nuova riga al file con la data). Quale opzione (delle 3 precedenti) hai provato e qual è stato il risultato - sii specifico - e si è verificato un errore in / var / log / cron? (se usi l'opzione di script, a) non dimenticare di chmod +
xeb

1
opzione 3 =], avevo provato a farlo prima ma non è stato eseguito il rendering. Ma ora sto notando che hai fatto qualcosa di piccolo. perché hai raddoppiato $ ($ (DATE))? vedi il mio aggiornamento sopra
qodeninja,

1
Si dispone di un errore di battitura nel aggiornamento è stato aggiunto - è $($DATEVAR)non $($(DATEVAR)). Pensala in questo modo - $()ovvero la parentesi esterna - lancia una nuova shell per elaborare qualunque cosa sia tra parentesi. In questo caso, la variabile $ DATEVAR è impostata su una stringa e viene passata alla shell. $(DATEVAR)è niente - perché DATEVARè nulla (cioè manca un $ per identificarlo come variabile). Puoi anche usare i backtick in giro $DATEVARper ottenere lo stesso risultato
cyberx86,

giusto. aggiornato. proviamo questo cattivo ragazzo! - Hazaaah! ha funzionato lol
qodeninja l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.