¿Cómo redirigir la salida a un archivo de registro desde cron y anteponer la marca de tiempo?

¿Cómo redirigir la salida a un archivo de registro desde cron y anteponer la marca de tiempo?

La mayoría de los registros en mi Mac tienen una marca de tiempo antes del mensaje de salida como este:

Nov 14 17:55:24 - SoftRAID Driver: SoftRAID driver loaded, version 5.8.1.

Estoy ejecutando un ejecutable en cron y en lugar de usar el correo quiero enviar toda la información a un archivo de registro y agregar una marca de tiempo a cada línea delante de la salida. Estoy usando >>para agregar a un solo archivo.

Este es mi crontab:

SHELL=/bin/bash
MAILTO=""
* 6-23 * * * /usr/local/bin/urlwatch >> /Users/john/cronjobs/urlwatch.log

Esto es lo que obtengo en urlwatch.log

UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

¿Cómo hago para que la salida se vea así?

Nov 14 17:55:24 - UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

Probé muchas sugerencias diferentes de toda la web y no tuve suerte. Si guardar en un archivo de texto es más fácil, también funcionará.

Probé esto que está cerca:

* 6-23 * * * (date && /usr/local/bin/urlwatch)  >> /Users/john/cronjobs/urlwatch.log

La salida en el archivo de registro se ve así:

Sun Mar 15 13:35:00 CDT 2020
UNCHANGED: (03)RansomWhere? Objective-See (https://objective-see.com/products/ransomwhere.html)
UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)
UNCHANGED: (02)urlwatch webpage (https://thp.io/2008/urlwatch/)

Respuesta1

Si tiene (o puede obtener, decerveza caserapor ejemplo) elts tyo mesutilidad tamp, entonces deberías poder hacer algo como

/usr/local/bin/urlwatch | /path/to/ts >> /Users/john/cronjobs/urlwatch.log

( /path/to/tsnormalmente estaría /usr/bin/tsen sistemas Linux; puede ser otra ubicación en OSX). De man ts:

DESCRIPTION
       ts adds a timestamp to the beginning of each line of input.

Si desea especificar un formato de hora no predeterminado, puede hacerlo, pero recuerde que el %signo tiene un significado especial crony debe tener un formato de escape. ver por ejemplo

Es posible que descubra que a grupos de líneas se les asigna la misma marca de tiempo, es decir,puededebe ser porque el programa que los genera está almacenando en un buffer su salida. Si las utilidades unbuffero stdbufestán disponibles para su sistema,puedeSerá posible aplicar el almacenamiento en búfer de línea como se describe aquí:

información relacionada