Tengo un script en ejecución constante que envío a un archivo de registro:
script.sh >> /var/log/logfile
Me gustaría agregar una marca de tiempo antes de cada línea que se agrega al registro. Me gusta:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
¿Hay algún jujitsu que pueda usar?
Respuestas:
Puede canalizar la salida del script a través de un bucle que prefija la fecha y hora actuales:
Si va a usar esto mucho, es fácil hacer una función bash para manejar el ciclo:
fuente
read
recortar espacios en blanco al principio y de la línea. Establece IFS (separador de campo interno de bash, básicamente una lista de caracteres de espacios en blanco) para vaciar elread
comando.echo
interpretar secuencias de escape. Si realmente desea que no interfiera con el contenido (aparte de agregar fechas), reemplace elecho
comando conprintf "%s %s\n" "$(date)" "$line"
date -u +"%Y-%m-%dT%H:%M:%SZ"
o tal vez más bonitadate +"%Y-%m-%d %T"
.date
) para cada línea de registro, que puede ser un inconveniente masivo dependiendo de su máquina y la cantidad de registros. Prefiero sugerir usarlots
si está disponible, vea la respuesta de @willemVer
ts
desde elmoreutils
paquete de Ubuntu :O, si
$command
el almacenamiento en búfer automático (requiereexpect-dev
paquete):fuente
El comando date proporcionará esa información
así que puedes
Es eso lo que querías ?
fuente
Simplemente puede hacer eco de las salidas del comando en el archivo de registro. es decir,
Realmente funciona :)
Ejemplo:
fuente
Hacer un
config.sh
archivoCuando necesita enviar para usar el archivo de registro
El archivo de registro se verá así
Entonces será fácil ordenar por fecha
fuente
Te refieres a:
fuente
script.sh
. El OP necesita una marca de tiempo por línea.Prueba esto
Llame a esta función de marca de tiempo en cada comando echo:
fuente
La respuesta aceptada https://serverfault.com/a/310104 puede ser un poco lenta, si se tienen que procesar muchas líneas, con la sobrecarga de iniciar el
date
proceso permitiendo aproximadamente 50 líneas por segundo en Ubuntu, y solo alrededor de 10 -20 en Cygwin.Cuando
bash
se puede suponer, una alternativa más rápida sería laprintf
integrada con su%(...)T
especificador de formato. Compararfuente
Puedes notar que awk corre rápido,
Pero, sed corre mucho más rápido,
Sin embargo, en una inspección más cercana, el conjunto no parece cambiar el tiempo,
fuente
"s/^/$(date -R) /"
y ejecutando la fecha una vez antes de sed. Sed pasa una cuerda estática.yes | head -5000000 | while read line; do echo $((SECONDS)); done | uniq -c
que es mucho más lento que gawk.ts
La utilidad tiene un rendimiento similar al bash loop.yes |head -5000000 |perl -ne 'print localtime."\t".$_' |uniq -c
que es un poco más lento que awk.El siguiente es el contenido de mi archivo de registro
algunos de mis contenidos de shell son los siguientes
fuente
Este script imprime el resultado en la terminal y también lo guarda en el archivo de registro.
Salida de muestra:
fuente
Otra opción es configurar una función para llamar cada vez que desee generar datos en su código:
Luego, cada vez en su código, desea enviarlo a la llamada del archivo de registro
Pan comido....
fuente
Pipe a "sed":
fuente