69 votes

Rotation du journal de stdout ?

J'ai un programme Linux qui peut écrire des informations sur stdout et stderr.

J'ai un Shell Shell qui redirige cette sortie vers un fichier dans /var/log . (Via >> et 2>&1 .)

Y a-t-il un moyen de faire tourner ce fichier journal ? (taille maximale, puis passer à un autre fichier, ne conserver qu'un nombre limité de fichiers)

J'ai vu quelques réponses qui parlent de la logrotate ce qui semble bien, mais ils semblent aussi se concentrer sur les programmes qui génèrent des fichiers journaux en interne et traitent les signaux HUP. Y a-t-il un moyen de faire fonctionner cela avec une redirection de sortie basique script ?

0voto

Vick Sun Points 1

Vous pouvez utiliser un simple bash scripts : ./my_app|./log_rotate.sh log.txt 5 mylogdir 10 1000

log nommé log.txt ,rotation 5 fois, stocké dans mylogdir, rotation 10 fois, rotation du log sur 1000 lignes, rotation du dir à chaque démarrage de my_app.

log_rotate.sh :

#!/bin/sh
logname=$1
lognumber=$2
dirname=$3
dirnumber=$4
line=$5
date
mkdir -p ${dirname}
cd ${dirname}
rm "data${dirnumber}" -rfv
for i in $(seq $((dirnumber - 1)) -1 0)
do
        mv "data$i" "data$(($i+1))" 2>/dev/null && echo mv "data$i" "data$(($i+1))"
done
mkdir -p data0
cd data0
dd of="${logname}" bs=2048 count=${line} 2>/dev/null
date
mv "${logname}" "${logname}.first" 2>/dev/null && echo mv "${logname}" "${logname}.first"
while true
do
        for i in $(seq $((lognumber - 1)) -1 1)
        do
                mv "${logname}.$i" "${logname}.$(($i+1))" 2>/dev/null && echo mv "${logname}.$i" "${logname}.$(($i+1))"
        done
        mv "${logname}" "${logname}.1" 2>/dev/null && echo mv "${logname}" "${logname}.1"
        dd of="${logname}" bs=2048 count=${line} 2>/dev/null
        date
done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X