Temos um aplicativo implantado em um servidor, que, em alguns cenários, gera alguns registros no formato abaixo.
process_name.hostname.common_text.log.{error/info/warning}.date.time
Agora, devido a esse formato, não há um log, mas vários desses logs com o mesmo process_name.hostname.common_text. {error / info / warning} parte, mas com resto das partes diferentes, devido a diferença de data e hora. Mas no que diz respeito ao logrotate, ele trata todos esses logs individuais e ele retém 1 cópia de cada log se eu disser
rotate 1
no logrotate conf.
Mas, no que me diz respeito, esses são todos os mesmos logs e não quero manter nenhum log diferente do log 1 recente de cada categoria ( error / info / warning ). Como eu iria sobre isso?
Eu pensei em escrever um script que será executado semanalmente no cron. E esse script verificará o arquivo recente de cada categoria ( error / info / warning ) usando timestamp ( ls -ltr ) e, em seguida, excluir resto de tais logs. Mas, novamente, está ficando muito complicado se eu tentar colocá-lo no script.
Estou procurando algo assim.
ls -ltr |grep process_name.hostname.common_text.log.error |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.info |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.warning |head -n -1
Os 3 comandos acima retornarão os nomes de todos os registros process_name.hostname.common_text.log. {error / info / warning} .date.time , exceto o recente.
1) É possível passar a saída de cada um dos comandos acima para exec ou xargs na mesma linha, para que eu possa rodar rm -rf contra ele?
2) qual é a melhor maneira de fazer isso? pq, o process_name novamente tem 2 nomes diferentes, então, eu terei que executar 6 comandos ou talvez mais que isso.
3) Em vez de digitar três vezes, uma vez por erro, e uma vez por informação, e uma vez por aviso, existe alguma maneira que eu possa fazer para todos os 3 em uma única linha?