sql >> Database >  >> RDS >> Oracle

Logroteren om bestanden met datumstempel op te schonen

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 hoe cron begrijpt daily )
  • rotate moet worden ingesteld op 7 (of een hoger getal).
  • maxage ingesteld op 7 (dagen)
  • dateext om standaard logrotate datumachtervoegsel te gebruiken
  • dateyesterday 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.



  1. Verbijsterend php/Mysql Tijdrekenkundig gedrag

  2. Java mySQL met 000webhost

  3. SQL afgekapt/groep/volgorde op datums (dag/maand/kwartaal/jaar) met datums voor het overslaan van de som zonder gegevens

  4. Uitzondering krijgen, niet alle codepaden retourneren een waarde