Posso usar o logrotate para compactar logs diários (data nomeados)?


8

Tenho logs no seguinte formato: AAAAMMDD

Quero compactar logs antigos (mais antigos que o dia atual) e talvez movê-los para um diretório diferente posteriormente.

Posso fazer isso no logrotate ou preciso usar um script personalizado no cron?

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 crontab será semelhante a:

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

Apenas ajuste LOGDIRe OLDLOGDIR. Às 12h30, todos os logs serão movidos no formato AAAAMMDD para os dias anteriores (e anteriores, se houver).


4
Sim, mas isso realmente não responde à minha pergunta. Minha pergunta era se eu posso usar o logrotate para isso.
Šimon Tóth

@ Let_Me_Be - eu pensei que estava implícito na minha resposta. Não, o logrotate não fará exatamente o que você deseja. Ou seja, você não pode apenas corresponder arquivos AAAAMMDD. Caso contrário, você pode chegar perto, usando nodateext, olddir, compress, e dailyopções.
Unpythonic

3

logrotate pode fazê-lo com olddir se o nome do arquivo de log for o mesmo sempre que for executado e você poderá adicionar datas. Se o nome do seu arquivo de log for alterado, ou seja, AAAAMMDD, 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
}

Cópias e gzips /logs/sys.log em /logs/logarchive/sys.20120101.log.gz, mantêm uma semana de registros.


1
Esta não é a resposta. Os logs já possuem registros de data e são rotacionados efetivamente Let_Me_Be apenas deseja compactá-los. Eu acredito que @jmtd está certo.
Andrew lorien

2

logrotateem si não faz isso. Eu recomendo escrever um script suplementar e invocá-lo de logrotateusar a postrotateopção na configuração.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.