2010-09-11 11 views
7

Il mio script di bash produce un file di registro. Ora mi piacerebbe implementare alcuni rotazione dei file di registro.
Diciamo che la prima volta si chiama somelog.log, la prossima volta che viene rinominato somelog.log.1 e il nuovo file di registro somelog.log.
La terza volta il nuovo registro è somelog.log di nuovo, ma somelog.log.1 viene rinominato somelog.log.2 e il vecchio somelog.log a somelog.log.1.
Sarei in grado di concedere un massimo di es. 5.

Questo è già fatto prima (script di esempio), qualsiasi suggerimento. Apprezzo qualsiasi consiglio.Rotazione del file di registro dello script Bash

+1

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

+1

Già risposto. [Qui] [1] [1]: http://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 –

risposta

2

Prova questa funzione di bash, ci vogliono due parametri:

  1. numero di massimo di megabyte del file deve superare per essere ruotato (altrimenti è lasciare intatta)
  2. percorso completo del nome del file.

fonte:

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

ho appena fatto uno script bash per questo: https://github.com/lingtalfi/logrotator

Esso controlla fondamentalmente dimensione del file di registro e se si supera una soglia arbitraria, copia il file di registro in una directory di registro.

È compatibile cron o puoi anche utilizzarlo manualmente.

Un tipico comando si presenta così:

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