Você pode usar o logrotate. Ele gira os logs de acordo com um arquivo de configuração para um serviço específico. Geralmente é executado pelo cron diariamente.
Um exemplo de um arquivo de configuração para o apache em /etc/logrotate.d/apache2
/var/log/apache2/*_log {
daily
rotate 31
missingok
compress
delaycompress
sharedscripts
postrotate
if [ -f "'. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}'" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
Isso seria:
- gira os logs todos os dias
- mantenha 31 arquivos de log girados
- Compactar logs girados, mas manter o mais recente girado um descompactado (delaycompress)
- Recarregue o processo
Se você não quiser que o processo seja recarregado, use copytruncate
, que copiará o conteúdo atual em um novo arquivo, compactará e truncará o arquivo de log atual. Nesse caso, você não precisa de sharedscripts
, postrotate
e endscript
.