Não sei se você pode fazer isso usando logrotate
. Você pode executar o seguinte como uma tarefa cron diária:
rm $(ls -t | sed -e '1,3d')
Eu tenho um serviço que cria automaticamente um arquivo de log com um timestamp no nome do arquivo na inicialização. Portanto, não preciso de logrotate para renomear / copiar / criar arquivos, mas o que eu quero é que o logrotate mantenha apenas os três mais novos desses arquivos (e, opcionalmente, compactá-los). Posso fazer isso de alguma forma?
Eu não acho que isso possa ser feito exatamente como você quer. Caso você ainda queira usar o logrotate, primeiro você precisa especificar com que frequência o logrotate irá rotacionar seu log (diário / semanal / mensal / anual). Você pode definir assim:
# rotate log files daily
daily
# Log files are rotated count times before being removed or mailed to the address
# specified in a mail directive. If count is 0, old versions are removed rather than
# rotated.
rotate 3
# Old versions of log files are compressed with gzip(1) by default.
compress
Mas como @quanta escreveu, isso provavelmente não pode ser feito com o logrotate. Você usará algumas configurações semelhantes às que escrevi acima ou precisará usar provavelmente outra ferramenta.