¿Cómo se configura una variable DATE para usar en un registro para la salida de crontab?

10

Estaba jugando aroudn con algunas variaciones de fecha como

DATE = $(date)

pero eso tampoco funcionó

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}

esto solo genera el texto tal como está ...

Quiero crear una entrada de registro en crontab.log con una marca de tiempo en cada actualización

¿Cómo puedo hacer esto en CentOS 6?

ACTUALIZAR

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

solo se muestra [CRON] y NADA cuando lo intenté = /

qodeninja
fuente

Respuestas:

28

Cron no es un shell: no analiza los comandos de la misma manera que lo hace un shell. Como tal, su variable se asigna como si fuera texto estático.

Hay tres soluciones que conozco para este problema:

Opción 1: utilice un script de shell para generar su comando, incluya las variables y la lógica que desee, y llame a ese script de shell desde cron.

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

myscript.sh:

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

Opción 2: incluya el comando de fecha directamente en su comando y, dado que todo el comando se pasa al shell, la fecha se procesará y se reemplazará con una fecha real.

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

Opción 3: establezca la variable de cadena en cron y páselo a su comando para que se procese (nota: no es necesario que se escapen los signos de porcentaje y la variable en sí misma se envuelve en $ () para ejecutarla en un shell separado: los backticks deberían funcionar igual):

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

(En todos los casos anteriores, por supuesto, puede usar una variable para la ruta de registro, en lugar de 'codificarla').

cyberx86
fuente
1
gracias por los excelentes comentarios +1, intenté agregarlo al crontab pero hacerlo no funcionó = / nunca representa DATEVAR
qodeninja
Acabo de hacer esto en un sistema compatible con RHEL / CentOS6 y dio el resultado esperado (es decir, agregó una nueva línea al archivo con la fecha). ¿Qué opción (de las 3 anteriores) probó y cuál fue el resultado? Sea específico? ¿Hubo un error en / var / log / cron? (si usa la opción de script, a) no olvide chmod + x y b) pruébelo primero (es decir, no a través de cron))
cyberx86
1
opción 3 =], había intentado hacer eso antes pero no se procesó. Pero ahora me doy cuenta de que hiciste algo muy pequeño. ¿Por qué doblaste el $ ($ (FECHA))? ver mi actualización anterior
qodeninja
1
Usted tiene un error en la actualización que agregó - es $($DATEVAR)no $($(DATEVAR)). Piénselo de esta manera, $()es decir, el soporte externo, lanza un nuevo shell para procesar lo que esté en los soportes. En este caso, la variable $ DATEVAR se establece en una cadena y se pasa al shell. $(DATEVAR)no es nada, porque DATEVARno es nada (es decir, le falta un $ para identificarlo como una variable). También puede usar los backticks $DATEVARpara obtener el mismo resultado
cyberx86
lo suficientemente justo. actualizado vamos a probar este chico malo! - Hazaaah! funcionó lol
qodeninja