Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Logrotate para limpar arquivos com data marcada


Logrotate remove os arquivos de acordo com a ordem na lista lexicalmente classificada de nomes de arquivos de log girados e também pela idade do arquivo (usando o horário da última modificação do arquivo)

  • girar é o número máximo de arquivos girados, você pode encontrar. Se houver um número maior de arquivos de log rotacionados, seus nomes serão classificados lexicamente e os menores lexicalmente serão removidos.

  • máximo define outro critério para remover arquivos de log girados. Qualquer arquivo de log girado, sendo mais antigo do que determinado número de dias, é removido. Observe que a data é detectada a partir da hora da última modificação do arquivo, não do nome do arquivo.

  • formato de data permite formatação específica para data em arquivos girados. A página de manual observa que o formato deve resultar em classificação lexicalmente correta .

  • data ontem permite usar datas em nomes de arquivos de log um dia atrás.

Para manter um determinado número de dias em arquivos alternados diariamente (por exemplo, 7), você deve definir rotate para o valor 7 e você pode ignorar maxage , se seus arquivos são criados e girados realmente todos os dias.

Se a criação do log não acontecer por alguns dias, por exemplo, por 14 dias, o número de arquivos de log rotacionados ainda será o mesmo (7).

maxage irá melhorar a situação em cenários de "logs não produzidos", sempre removendo arquivos muito antigos. Após 7 dias sem produção de log, não haverá nenhum arquivo de log girado presente.

Você não pode usar dateformat como o OP mostra, pois não é classificável lexicalmente. Mexer com dateformat provavelmente resultaria na remoção de outros arquivos de log girados do que você realmente queria.

Dica :Execute logrotate da linha de comando com -d opção para executar uma simulação:você verá o que o logrotate faria, mas na verdade não faz nada. Em seguida, execute uma execução manual usando -v (verbose) para que você possa confirmar que o que está feito é o que você quer.

Solução:logs limpos criados pelo cron


O conceito é:

Deixe o cron criar e atualizar os arquivos de log, mas faça pequenas modificações para criar arquivos, seguindo os nomes de arquivo padrão de logrotate ao usar o padrão dateext
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

Use logrotate apenas para remover arquivos de log muito antigos
  • apontar para um arquivo de registro não existente /data/tier2/scripts/logs/recover_standby_SID.log
  • use missingok para permitir que a limpeza do logrotate aconteça
  • definir rotate alto o suficiente, para cobrir o número de arquivos de log a serem mantidos (pelo menos 7, se houver um arquivo de log "girado" por dia, mas você pode configurá-lo com segurança como 9999)
  • definir maxage a 7. Isso removerá os arquivos com tempo de última modificação superior a 7 dias.
  • dateext é usado apenas para garantir que o logrotate pesquise arquivos mais antigos que pareçam girados.

O arquivo de configuração do Logrotate ficaria assim:
data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

Solução:gire diretamente por logrotate uma vez por dia


Não tenho certeza, como o arquivo de espera de recuperação de origem é criado, mas vou assumir que o Oracle ou algum script seu está anexando regularmente ou continuamente a um arquivo /data/tier2/scripts/logs/recover_standby_SID.log

O conceito é:
  • gire o arquivo uma vez por dia logrotate
  • trabalhando diretamente com arquivo de log contendo dados de recuperação /data/tier2/scripts/logs/recover_standby_SID.log
  • daily causará rotação uma vez por dia (em termos de como o cron entende daily )
  • rotate deve ser definido como 7 (ou qualquer número maior).
  • maxage definido para 7 (dias)
  • dateext para usar o sufixo de data logrotate padrão
  • dateyesterday usado para fazer com que os sufixos de data em arquivos girados sejam um dia de volta.
  • missingok para limpar arquivos mais antigos, mesmo quando não há conteúdo novo para girar.

A configuração do Logrotate ficaria assim:
data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

Observe que você pode precisar brincar um pouco com copytruncate e outras opções semelhantes relacionadas a como o arquivo de log de origem é criado pelo processo externo e como ele reage ao ato de rotação.