Enviar salida cron a un archivo con una marca de tiempo en su nombre

38

Tengo un crontab como este en una configuración de LAMP:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Esto escribe la salida del archivo en cron.log . Sin embargo, cuando se ejecuta nuevamente, sobrescribe todo lo que estaba previamente en el archivo.

¿Cómo puedo hacer que cron salga a un archivo con una marca de tiempo en su nombre de archivo?

Un nombre de archivo de ejemplo sería algo así: 2010-02-26-000000-cron.log

Realmente no me importa el formato, siempre que tenga una marca de tiempo de algún tipo.

Gracias por adelantado.

Philip Morton
fuente
8
si no desea $HOME/cron.logque se sobrescriba, >>no lo use>
Dave Cheney

Respuestas:

66

Tratar:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Juega con el formato de fecha, si quieres; solo asegúrese de escapar %como \%, como se indicó anteriormente.

fisión
fuente
Y permítanme sugerir un enfoque para nombres de archivos como 0 0 * * * /some/path/to/a/file.php > $HOME/scriptname-fecha + \% Y \% m \% d \% H \% M \% S.log
Kristian
Si lo necesita un poco más legible para los humanos, intente: date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cron.log
DevilCode
44
@DevilCode, sí, aunque los espacios en los nombres de archivo no son muy convencionales en Unix. Guiones o guiones bajos podrían ser una mejor opción: date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log.
fisión
1
Esos malditos personajes de escape siempre me atrapan. ¡Gracias por el recordatorio!
Tony-Caffe
14

Recomiendo encarecidamente que guarde todo en el mismo archivo, utilizando la marca de tiempo, como se explica aquí .

retirar

2> y 1

y ejecútelo a través del script de marca de tiempo antes de guardarlo en el archivo de registro (como se explica en el enlace anterior).

Tony Gil
fuente
6

También puede agregar su salida al archivo de registro haciéndolo así:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
Pausado hasta nuevo aviso.
fuente
0

Modifiqué el script así:

`/bin/date +\%Y\%m\%d`.log
Ardhy
fuente
-2

Resolví este problema; simplemente agregue la ruta de la fecha (/ bin / date) antes del comando de fecha.

usuario213005
fuente
2
Por favor agregue más información y ejemplo.
Danijel
-2
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log
Ivan Kovtun
fuente
55
Esto necesitaría mucha explicación.
Sven