Logrotate fjerner filer i henhold til rækkefølge i leksikalsk sorteret liste over roterede logfilnavne og også efter filalder (ved hjælp af sidste ændringstid for filen)
-
rotér er det maksimale antal roterede filer, du kan finde. Hvis der er et højere antal roterede logfiler, sorteres deres navne leksikalsk, og de leksikalsk mindste fjernes.
-
maxage definerer et andet kriterium for fjernelse af roterede logfiler. Enhver roteret logfil, der er ældre end det angivne antal dage, fjernes. Bemærk, at datoen detekteres fra filens sidste ændringstidspunkt, ikke fra filnavnet.
-
datoformat tillader specifik formatering af dato i roterede filer. Man page bemærker, at formatet skal resultere i leksikalsk korrekt sortering .
-
i går tillader brug af datoer i logfilnavne en dag tilbage.
For at beholde et givet antal dage i dagligt roterede filer (f.eks. 7), skal du indstille rotate
til værdien 7, og du kan ignorere maxage
, hvis dine filer oprettes og roteres virkelig hver dag.
Hvis logoprettelse ikke sker i et par dage, f.eks. i 14 dage vil antallet af roterede logfiler stadig være det samme (7).
maxage
vil forbedre situationen i "logs ikke produceret" scenarier ved altid at fjerne for gamle filer. Efter 7 dage uden logproduktion vil der ikke være nogen roterede logfiler til stede.
Du kan ikke bruge dateformat
som OP viser, da den ikke er leksikalsk sorterbar. Roder med dateformat
ville sandsynligvis resultere i fjernelse af andre roterede logfiler, end du egentlig ønskede.
Tip :Kør logrotate fra kommandolinjen med -d
mulighed for at udføre et tørløb:du vil se, hvad logrotate ville gøre, men faktisk ikke gør noget. Udfør derefter en manuel kørsel med -v
(verbose), så du kan bekræfte, at det, der bliver gjort, er det, du ønsker.
Løsning:Rens logfiler oprettet af cron
Konceptet er:
Lad cron oprette og opdatere logfilerne, men lav små ændringer for at oprette filer, efter logrotate standard filnavne, når du bruger standard dateext
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Brug kun logrotate til at fjerne for gamle logfiler
- sigte mod ikke eksisterende logfil
/data/tier2/scripts/logs/recover_standby_SID.log
- brug
missingok
for at lade logrotate oprydning ske - indstil
rotate
høj nok til at dække antallet af logfiler at beholde (mindst 7, hvis der vil være én "roteret" logfil om dagen, men du kan roligt indstille den meget højt som 9999) - indstil
maxage
til 7. Dette vil fjerne filer med en sidste ændringstid på mere end 7 dage. dateext
bruges bare for at sikre, at logrotere søgninger efter ældre filer, der ligner roterede.
Logrotate-konfigurationsfilen ville se ud som:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Løsning:roter direkte ved at logrotere én gang om dagen
Jeg er ikke sikker på, hvordan en kildegendannelses-standby-fil oprettes, men jeg vil antage, at Oracle eller et eller andet script regelmæssigt eller konstant tilføjer til en fil /data/tier2/scripts/logs/recover_standby_SID.log
Konceptet er:
- rotér filen én gang om dagen ved at
logrotate
- arbejder direkte med logfil, der indeholder gendannelsesdata
/data/tier2/scripts/logs/recover_standby_SID.log
daily
vil forårsage rotation én gang om dagen (med hensyn til hvordancron
). forstårdaily
)rotate
skal indstilles til 7 (eller et højere tal).maxage
indstillet til 7 (dage)dateext
for at bruge standard logroter dato-suffiksdateyesterday
bruges til at forårsage datosuffikser i roterede filer, der ligger en dag tilbage.missingok
for at rense ældre filer, selv når der ikke er nyt indhold til at rotere.
Logrotate config ville se ud som:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Bemærk, at du muligvis skal lege lidt med copytruncate
og andre lignende muligheder, der er relateret til, hvordan kildelogfilen oprettes af ekstern proces, og hvordan den reagerer på rotationshandlingen.