Oracle
 sql >> Database >  >> RDS >> Oracle

Logrotate per ripulire i file contrassegnati dalla data

Logrotate rimuove i file in base all'ordine nell'elenco ordinato lessicalmente dei nomi dei file di registro ruotati e anche in base all'età del file (utilizzando l'ora dell'ultima modifica del file)

  • ruota è il numero massimo di file ruotati che potresti trovare. Se c'è un numero maggiore di file di registro ruotati, i loro nomi vengono ordinati lessicalmente e quelli lessicalmente più piccoli vengono rimossi.

  • massimo definisce un altro criterio per la rimozione dei file di registro ruotati. Qualsiasi file di registro ruotato, che è più vecchio del numero di giorni specificato, viene rimosso. Si noti che la data viene rilevata dall'ora dell'ultima modifica del file, non dal nome del file.

  • formato data consente una formattazione specifica per la data nei file ruotati. La pagina man rileva che il formato risulterà in un ordinamento lessicalmente corretto .

  • giorno di ieri consente di utilizzare le date nei nomi dei file di registro un giorno indietro.

Per mantenere un determinato numero di giorni nei file ruotati giornalmente (ad es. 7), devi impostare rotate al valore di 7 e puoi ignorare maxage , se i tuoi file vengono creati e ruotati davvero ogni giorno.

Se la creazione del registro non avviene per un paio di giorni, ad es. per 14 giorni, il numero di file di registro ruotati sarà sempre lo stesso (7).

maxage migliorerà la situazione negli scenari di "registri non prodotti" rimuovendo sempre i file troppo vecchi. Dopo 7 giorni di mancata produzione di log non saranno presenti file di log ruotati.

Non puoi usare dateformat come mostra OP, in quanto non è ordinabile lessicalmente. Fare pasticci con dateformat probabilmente comporterebbe la rimozione di altri file di registro ruotati di quelli che volevi realmente.

Suggerimento :esegui logrotate dalla riga di comando con -d opzione per eseguire una corsa a secco:vedrai cosa farebbe logrotate ma in realtà non fa nulla. Quindi esegui un'esecuzione manuale usando -v (verboso) in modo da poter confermare che ciò che è stato fatto è ciò che desideri.

Soluzione:pulire i log creati da cron

Il concetto è:

Consenti a cron di creare e aggiornare i file di registro, ma apportare piccole modifiche per creare file, seguendo logrotate i nomi dei file standard quando si utilizza dateext predefinito

/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

Usa logrotate solo per rimuovere file di registro troppo vecchi

  • mira a un file di registro non esistente /data/tier2/scripts/logs/recover_standby_SID.log
  • usa missingok per consentire la pulizia di logrotate
  • imposta rotate abbastanza alto, per coprire il numero di file di registro da conservare (almeno 7, se ci sarà un file di registro "ruotato" al giorno, ma puoi tranquillamente impostarlo molto alto come 9999)
  • imposta maxage a 7. Questo rimuoverà i file che hanno l'ultima modifica superiore a 7 giorni.
  • dateext viene utilizzato solo per garantire, logrotate le ricerche di file meno recenti che sembrano ruotati.

Il file di configurazione di Logrotate sarebbe simile a:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

Soluzione:ruota direttamente per logrotate una volta al giorno

Non sono sicuro di come viene creato il file di standby del ripristino del codice sorgente, ma presumo che Oracle o qualche tuo script venga aggiunto regolarmente o continuamente a un file /data/tier2/scripts/logs/recover_standby_SID.log

Il concetto è:

  • ruota il file una volta al giorno di logrotate
  • lavorare direttamente con il file di registro contenente i dati di ripristino /data/tier2/scripts/logs/recover_standby_SID.log
  • daily causerà la rotazione una volta al giorno (in termini di modalità di cron comprende daily )
  • rotate deve essere impostato su 7 (o su un numero superiore).
  • maxage impostato su 7 (giorni)
  • dateext per utilizzare il suffisso di data logrotate predefinito
  • dateyesterday usato per far sì che i suffissi di data nei file ruotati risalissero a un giorno indietro.
  • missingok per pulire i file meno recenti anche quando non sono presenti nuovi contenuti da ruotare.

La configurazione di Logrotate sarebbe simile a:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

Nota che potresti dover giocare un po' con copytruncate e altre opzioni simili relative a come viene creato il file di registro di origine da un processo esterno e come reagisce all'atto di rotazione.