2010-09-11 8 views
7

Mi secuencia de comandos bash produce un archivo de registro. Ahora me gustaría implementar algo de rotación de archivos de registro.
Digamos que la primera vez que se llama somelog.log, la próxima vez que se cambió el nombre a somelog.log.1 y el nuevo archivo de registro somelog.log.
La tercera vez que el nuevo registro es somelog.log de nuevo, pero somelog.log.1 se cambia el nombre a somelog.log.2 y el viejo somelog.log a somelog.log.1.
yo sería capaz de conceder un máximo de 5.
por ejemplo
¿Este hecho antes (script de ejemplo), cualquier sugerencia. Agradezco cualquier consejo.Giro del archivo de registro del script de Bash

+1

hombre [logrotate] (http://linux.die.net/man/8/logrotate)? –

+1

Ya respondieron. [Aquí] [1] [1]: http://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 –

Respuesta

2

Pruebe esta función bash, que toma dos parámetros:

  1. número de megabytes máximo del archivo debe superar para ser girado (de lo contrario se deja sin tocar)
  2. ruta completa del nombre de archivo.

fuente:

function rotate() { 
    # minimum file size to rotate in MBi: 
    local MB="$1" 
    # filename to rotate (full path) 
    local F="$2" 
    local msize="$((1024*1024*${MB}))" 
    test -e "$F" || return 2 

    local D="$(dirname "$F")" 
    local E=${F##*.} 
    local B="$(basename "$F" ."$E")" 

    local s= 

    echo "rotate msize=$msize file=$F -> $D | $B | $E" 
    if [ "$(stat --printf %s "$F")" -ge $msize ] ; then 
    for i in 8 9 7 6 5 4 3 2 1 0; do 
     s="$D/$B-$i.$E" 
     test -e "$s" && mv $s "$D/$B-$((i+1)).$E" 
    # emtpy command is need to avoid exit iteration if test fails: 
     :; 
    done && 
    mv $F $D/$B-0.$E 
    else 
    echo "rotate skip: $F < $msize, skip" 
    fi 
    return $? 
} 
0

que acabo de hacer un script bash para ello: https://github.com/lingtalfi/logrotator

Básicamente comprueba el tamaño de su archivo de registro, y si supera un umbral arbitrario, se copia el archivo de registro en un directorio de registro.

Es Cron amable, o se puede utilizar de forma manual también.

Un comando típico se parece a lo siguiente:

> ./logrotator.sh -f private/log -m {fileName}.{datetime}.txt -v 
Cuestiones relacionadas