Posso usar o logrotate para compactar logs diários (com nomes de datas)?

7

Tenho logs no seguinte formato: AAAAMMDD

Eu quero comprimir os logs antigos (mais antigos do que o dia atual) e, em seguida, movê-los para um diretório diferente.

Posso fazer isso no logrotate, ou eu tenho que usar um script personalizado no cron?

    
por Let_Me_Be 24.06.2011 / 11:54

3 respostas

4

Aqui está um script rápido que fará o que você precisa:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

Torne o script executável:

$ chmod +x /where/you/put/this/script

A entrada do crontab será semelhante a:

30 0 * * * /where/you/put/this/script

Basta ajustar LOGDIR e OLDLOGDIR . Às 12h30, todos os registros serão movidos no formato AAAAMMDD para os dias anteriores (e anteriores, se houver).

    
por 24.06.2011 / 12:24
3

logrotate pode fazer isso com o olddir se o seu nome de arquivo de log é o mesmo toda vez que ele é executado e você pode adicionar datas. Se o nome do arquivo de log mudar, por exemplo, YYYYMMDD, o logrotate não fará isso por você.

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

Copia e gzips /logs/sys.log para /logs/logarchive/sys.20120101.log.gz, mantém uma semana de registros.

    
por 17.08.2012 / 12:54
2

logrotate em si não faz isso. Eu recomendaria escrever um script suplementar e invocá-lo a partir de logrotate usando a opção postrotate na configuração.

    
por 24.06.2011 / 17:14