2010-09-11 9 views
7

Mon script bash génère un fichier journal. Maintenant, je voudrais mettre en place une rotation du fichier journal.
Disons que la première fois qu'il est appelé somelog.log, la prochaine fois, il est renommé somelog.log.1 et le nouveau fichier journal de somelog.log.
La troisième fois, le nouveau journal est somelog.log à nouveau, mais somelog.log.1 est renommé somelog.log.2 et l'ancien somelog.log à somelog.log.1.
Je serais en mesure d'accorder un maximum de par exemple 5.

Est-ce fait avant (exemple de script), des suggestions. J'apprécie tout conseil.Rotation du fichier journal du script Bash

+1

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

+1

Déjà répondu. [Ici] [1] [1]: http://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 –

Répondre

2

Essayez cette fonction bash, il prend deux paramètres:

  1. nombre de méga-octets au maximum le fichier doit dépasser à rotation (est par ailleurs laisser intacte)
  2. chemin complet du nom de fichier.

source:

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

Je viens de faire un script bash pour que: https://github.com/lingtalfi/logrotator

Il vérifie essentiellement la taille de votre fichier journal, et si elle dépasse un seuil arbitraire, il copie le fichier journal dans un répertoire de journal.

Il est cron amical, ou vous pouvez l'utiliser manuellement aussi.

Une commande typique ressemble à ça:

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