Opção de copyrtrate Logrotate demorando muito tempo

0

Estou executando o logrotate a cada 4 horas usando o crontab. Eu quero rodar arquivos a cada 50G, o que é esperado em 4 horas. Meu logrotate.config é como abaixo:

/log/*/*/*/*.log
{
        size 50G
        copytruncate
        missingok
        notifempty
        nocompress
        postrotate
                dir=${1%/*}
                mv "$1" "$dir"\/"$(basename $1 .1)-$(date +'%Y%m%d_%H%M').1";
        endscript
        lastaction
                find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;
        endscript
}

Mas meus arquivos estão em GBs. Então, está tudo bem em usar a opção copytruncate? ou existe outra alternativa para isso. Uma solução que posso pensar é, usando script prerotate para renomear o arquivo em vez de copiar.

    
por KrunalParmar 18.04.2018 / 09:40

1 resposta

1

1) seus arquivos de log são muito grandes. adicione uma entrada logrotate ao seu crontab (a cada 5 minutos ou mais) para torná-los menores e mais fáceis de manusear.
2) copytruncate irá copiar (50GB é muito), então trunca (ftruncate) o arquivo para 0 bytes. isso leva tempo e você perderá registros ao executar isso.
3) tente analisar o arquivo e se livrar das informações desnecessárias (como descrição de campo - criar um cabeçalho) e manter os valores apenas, vírgula (ou outra marca) separados.

melhores opções:
- maior freqüência.
- sem copytruncate.
- kill -HUP o processo de reler o arquivo conf.
- rotate 1.
- compress.
- move o arquivo de log gzipado para um local seguro

    
por 06.07.2018 / 22:18