Faça isso com logrotate, apenas diga o que você quer ...
/var/log/nginx/*.log {
daily
dateext
missingok
rotate 7305 # 2 decades
olddir /var/log/nginx/old
compress
delaycompress
notifempty
create 644 nginx root
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 'cat /var/run/nginx.pid'
fi
endscript
}
Eu não uso o nginx, então usei um exemplo que encontrei para o postrotate ... Se você já tem um script logrotate, comece modificando isso.
Partes principais:
- "diariamente" significa todos os dias. Você poderia fazer semanalmente ou baseado em tamanho, mas isso não interage tão bem com "dateext".
- "dateext" significa que dará aos arquivos de log rotacionados um nome baseado na data em vez de um número simples; Dessa forma, não é necessário renomear cada arquivo de log todos os dias e você pode informar a data de um arquivo de log a partir do nome do arquivo
- "girar 7305" - isso é duas décadas. Mantenha mais ou menos ... logrotate realmente prefere ter algum tipo de aposentadoria, mas você pode configurá-lo ridiculamente alto.
- "olddir" precisa estar no mesmo sistema de arquivos, mas isso manterá os registros em um diretório separado para que você possa descobrir o que está acontecendo
- "delaycompress" e "create" ajudam a garantir que ele funcione com softwares que não querem trabalhar com ele