Rotaciona arquivos de log com timestamp no nome do arquivo

3

Eu tenho um diretório de log no qual meu aplicativo é gravado. Cria um arquivo de log assim:

2015-01-22-10-full-activity.log
2015-01-22-11-full-activity.log
2015-01-22-12-full-activity.log
2015-01-22-13-full-activity.log

Eu quero compactar todos os arquivos, exceto o arquivo mais recente, e excluir qualquer arquivo com mais de três dias.

Eu pensei que logrotate seria capaz de fazer isso para mim, mas eu não consigo entender e, potencialmente, é porque eu estou nomeando meu log de atividades com o tempo em seu nome.

Alguma ideia?

    
por johnwards 22.01.2015 / 15:39

1 resposta

6

Se você já estiver criando os arquivos com a data no nome, logrotate não é a resposta; Baseia-se em torno da idéia de o aplicativo sempre gravar no mesmo arquivo de log (por exemplo, /var/log/app/output.log) e, em seguida, o logrotate se encarrega de renomear / compactar os arquivos e dizer ao aplicativo para reabrir o arquivo. arquivo de destino original novamente.

Nesse caso, talvez um par de tarefas agendadas usando "localizar" com -mtime, por exemplo:

1 0 * * * root find /path/to/logs/*.log -mtime +1 -daystart -exec gzip {} \;

2 0 * * * root find /path/to/logs/*.log.gz -mtime +3 -daystart -delete

Você pode querer mexer com os números em -mtime e o uso de -daystart (ou não) para obter os resultados precisos desejados (depende de como você deseja contar "número de dias", etc.)

    
por 22.01.2015 / 20:42