Logrotate verwijdert bestanden volgens de volgorde in de lexicaal gesorteerde lijst met geroteerde logbestandsnamen, en ook op bestandsleeftijd (gebruikmakend van de laatste wijzigingstijd van het bestand)
-
roteren is het maximale aantal geroteerde bestanden dat u kunt vinden. Als er een groter aantal geroteerde logbestanden is, worden hun namen lexicaal gesorteerd en worden de lexicaal kleinste verwijderd.
-
max. definieert een ander criterium voor het verwijderen van geroteerde logbestanden. Elk geroteerd logbestand dat ouder is dan het opgegeven aantal dagen, wordt verwijderd. Merk op dat de datum wordt gedetecteerd op basis van de laatste wijzigingstijd van het bestand, niet op basis van de bestandsnaam.
-
datumformaat staat specifieke opmaak toe voor datum in geroteerde bestanden. Man-pagina merkt op dat het formaat zal resulteren in lexicaal correcte sortering .
-
gisteren staat het gebruik van datums in de namen van logbestanden één dag terug toe.
Om het opgegeven aantal dagen in dagelijks geroteerde bestanden te behouden (bijv. 7), moet u rotate
instellen naar waarde 7 en u mag maxage
ignore negeren , als uw bestanden echt elke dag worden gemaakt en geroteerd.
Als het maken van logs een paar dagen niet gebeurt, b.v. gedurende 14 dagen zal het aantal geroteerde logbestanden nog steeds hetzelfde zijn (7).
maxage
zal de situatie in "logs niet geproduceerd" scenario's verbeteren door altijd te oude bestanden te verwijderen. Na 7 dagen geen logproductie zijn er geen geroteerde logbestanden meer aanwezig.
U kunt dateformat
niet gebruiken zoals OP laat zien, omdat het niet lexicaal sorteerbaar is. Knoeien met dateformat
zou waarschijnlijk resulteren in het verwijderen van andere geroteerde logbestanden dan u eigenlijk wilde.
Tip :Voer logrotate uit vanaf de opdrachtregel met -d
optie om een droge run uit te voeren:u ziet wat logrotate zou doen, maar doet eigenlijk niets. Voer vervolgens een handmatige run uit met -v
(uitgebreid) zodat u kunt bevestigen dat wat gedaan is, is wat u wilt.
Oplossing:schone logs gemaakt door cron
Het concept is:
Laat cron de logbestanden maken en bijwerken, maar breng kleine wijzigingen aan om bestanden te maken, waarbij de standaardbestandsnamen worden geroteerd bij gebruik van standaard dateext
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Gebruik logrotate alleen voor het verwijderen van te oude logbestanden
- richt op niet-bestaand logbestand
/data/tier2/scripts/logs/recover_standby_SID.log
- gebruik
missingok
om het opschonen van logrotate te laten gebeuren - stel
rotate
in hoog genoeg om het aantal logbestanden te dekken dat moet worden bewaard (minstens 7, als er één "geroteerd" logbestand per dag zal zijn, maar u kunt het veilig heel hoog instellen, zoals 9999) - stel
maxage
in tot 7. Hiermee worden bestanden verwijderd waarvan de laatste wijzigingstijd langer is dan 7 dagen. dateext
wordt alleen gebruikt om ervoor te zorgen, logrotate zoekopdrachten voor oudere bestanden die eruitzien als geroteerd.
Logrotate configuratiebestand zou er als volgt uitzien:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Oplossing:één keer per dag direct roteren door logrotate
Ik weet niet zeker hoe het standby-bestand voor bronherstel wordt gemaakt, maar ik neem aan dat Oracle of een script van u regelmatig of voortdurend wordt toegevoegd aan een bestand /data/tier2/scripts/logs/recover_standby_SID.log
Het concept is:
- draai het bestand eenmaal per dag door
logrotate
- direct werken met logbestand met herstelgegevens
/data/tier2/scripts/logs/recover_standby_SID.log
daily
zal eenmaal per dag rotatie veroorzaken (in termen van hoecron
begrijptdaily
)rotate
moet worden ingesteld op 7 (of een hoger getal).maxage
ingesteld op 7 (dagen)dateext
om standaard logrotate datumachtervoegsel te gebruikendateyesterday
gebruikt om ervoor te zorgen dat datumachtervoegsels in geroteerde bestanden één dag teruggaan.missingok
om oudere bestanden op te schonen, zelfs als er geen nieuwe inhoud om te roteren aanwezig is.
Logrotate-configuratie zou er als volgt uitzien:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Merk op dat je misschien een beetje moet spelen met copytruncate
en andere vergelijkbare opties die verband houden met hoe het bronlogbestand is gemaakt door een extern proces en hoe het reageert op de rotatie.