Logrotate tar bort filer enligt ordning i lexikalt sorterad lista över roterade loggfilnamn, och även efter filålder (med den senaste ändringstiden för filen)
-
rotera är maximalt antal roterade filer, kan du hitta. Om det finns ett högre antal roterade loggfiler, sorteras deras namn lexikalt och de lexikalt minsta tas bort.
-
maxage definierar ett annat kriterium för att ta bort roterade loggfiler. Alla roterade loggfiler som är äldre än det angivna antalet dagar tas bort. Observera att datumet detekteras från filens senaste ändringstid, inte från filnamnet.
-
datumformat tillåter specifik formatering för datum i roterade filer. Man page noterar att formatet ska resultera i lexikalt korrekt sortering .
-
datum igår tillåter användning av datum i loggfilnamn en dag tillbaka.
För att behålla ett givet antal dagar i dagliga roterade filer (t.ex. 7), måste du ställa in rotate
till värdet 7 och du kan ignorera maxage
, om dina filer skapas och roteras verkligen varje dag.
Om loggskapandet inte sker på ett par dagar, t.ex. i 14 dagar kommer antalet roterade loggfiler att vara detsamma (7).
maxage
kommer att förbättra situationen i "loggar inte producerade" scenarier genom att alltid ta bort för gamla filer. Efter 7 dagar utan loggproduktion kommer det inte att finnas några roterade loggfiler.
Du kan inte använda dateformat
som OP visar, eftersom det inte är lexikalt sorterbart. Bråkar med dateformat
skulle förmodligen resultera i att andra roterade loggfiler tas bort än du egentligen ville.
Tips :Kör logrotate från kommandoraden med -d
alternativ för att utföra en torrkörning:du kommer att se vad logrotate skulle göra men faktiskt inte gör någonting. Utför sedan en manuell körning med -v
(verbose) så att du kan bekräfta att det som görs är vad du vill.
Lösning:rengör loggar skapade av cron
Konceptet är:
Låt cron skapa och uppdatera loggfilerna, men gör små ändringar för att skapa filer, följ logrotate standardfilnamn när du använder standard dateext
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Använd endast logrotate för att ta bort för gamla loggfiler
- sikta på en inte befintlig loggfil
/data/tier2/scripts/logs/recover_standby_SID.log
- använd
missingok
för att låta logroterande rensning ske - ställ in
rotate
tillräckligt hög för att täcka antalet loggfiler som ska behållas (minst 7, om det kommer att finnas en "roterad" loggfil om dagen, men du kan säkert ställa in den väldigt högt som 9999) - ställ in
maxage
till 7. Detta kommer att ta bort filer som har senaste ändringstid längre än 7 dagar. dateext
används bara för att säkerställa, logrotera sökningar efter äldre filer som ser ut som roterade.
Logrotate-konfigurationsfilen skulle se ut så här:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Lösning:rotera direkt genom att logrotera en gång om dagen
Jag är inte säker på hur en standbyfil för källåterställning skapas, men jag antar att Oracle eller något av ditt skript regelbundet eller kontinuerligt läggs till i en fil /data/tier2/scripts/logs/recover_standby_SID.log
Konceptet är:
- rotera filen en gång om dagen med
logrotate
- arbetar direkt med loggfilen som innehåller återställningsdata
/data/tier2/scripts/logs/recover_standby_SID.log
daily
kommer att orsaka rotation en gång om dagen (i termer av hurcron
). förstårdaily
)rotate
måste ställas in på 7 (eller något högre nummer).maxage
inställd på 7 (dagar)dateext
för att använda standardsuffixet för logrotera datumdateyesterday
används för att orsaka datumsuffix i roterade filer som ligger en dag tillbaka.missingok
för att rensa äldre filer även när det inte finns något nytt innehåll att rotera.
Logrotate config skulle se ut så här:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Observera att du kan behöva leka lite med copytruncate
och andra liknande alternativ som är relaterade till hur källloggfilen skapas av extern process och hur den reagerar på rotationshandlingen.