Compactar logs girados com cronolog

3

Eu tenho um monte de servidores (Centos 5.x) com o Apache que tem seus logs girados com o cronolog. Qual é a melhor estratégia para compactar e excluir esses logs automaticamente após um certo tempo? CustomLog "| / usr / sbin / cronolog /var/log/httpd/my.examplehost.com/access_log-%Y%m%d" common

Eu estava pensando em criar um script cron que apenas diz

gzip /var/logs/httpd/my.examplehost.com/*

Mas isso também não tenta compactar o arquivo no qual o apache está gravando atualmente? Na página inicial do cronolog, há apenas menção de que você deve escrever seus trabalhos no cron ou similar, mas sem instruções sobre como fazer isso.

    
por palto 27.07.2012 / 09:49

1 resposta

3

Logrotate é realmente a ferramenta para este trabalho, mas se você não pode usá-lo, você pode usar find e -ctime patameter

find /var/logs/httpd/my.example.host.com/ -ctime +0 -not -name '*.gz' -exec gzip {} \; 

deve fazer o que quiser, pois encontra arquivos que foram alterados > 24 horas atrás que já não foram compactados e compactados.

Para garantir que o arquivo em que você está trabalhando ainda não esteja aberto, você pode fazer algo como

#!/bin/bash
for file in $(find /var/logs/httpd/my.example.host.com/ -ctime +0 -not -name '*.gz')
do
    lsof | grep $file
    if [$? -eq 1 ]
    then
        gzip $file
    fi
done
    
por 27.07.2012 / 17:54