Logrotate - deja un archivo con algo de su contenido

Estoy buscando una herramienta o secuencia de comandos cuyo registro rota una carpeta o archivos de registro individuales, pero deja algunas líneas en los registros, por ejemplo, corta todas las líneas que tienen más de 2 días y las escribe en otro archivo.

¿Existen scripts, herramientas o demonios que puedan hacer esto? (Estoy trabajando con raspian)

No es exactamente lo que buscas, pero podría servir como un comienzo: ¿ Cómo truncar el archivo por líneas? Primero necesitaría encontrar el número de línea de la primera línea que desea mantener, por ejemplo, greppara la fecha ( grep -n "2016-03-28" <file> | awk -F ':' '{print $1}' | head -n 1haría eso).

Respuestas (1)

Creo que logrotatepuedo hacer esto con las directivas copyy postrotate. Nunca he hecho esto yo mismo. Tal vez aquí está el comienzo de una logrotate.confestrofa:

/var/log/mylog { 
    rotate 5
    weekly
    copy
    postrotate
        today=`date +"%b %e"
        yesterday=`date +"%b %e" -d "-1 days"
        tempfile=`mktemp`
        grep "$today\|$yesterday" /var/log/mylog > $tempfile
        mv $tempfile /var/log/mylog
    endscript
} 

Esto no va a ser ideal debido a las condiciones de carrera, creo. sedpodría ser una mejor opción. Tenga en cuenta que el registro anterior tendrá entradas de fecha de hoy y de ayer, por lo que habrá duplicados. Probablemente podría eliminarlos con algunas secuencias de comandos adicionales. Además, probablemente sería mejor (y puede ser necesario) colocar las líneas de la postrotateestrofa en su propio script de shell.

Esto supone que sus archivos de registro usan el estándar común de especificar fechas de registro con meses y días como "29 de marzo".