Ein VPN-helsesjekk som legg til éi linje i minuttet lagar stille ei anna plikt: å avgjere korleis desse linjene forlèt disken. Å reparere tunnelen gjer ingenting for den plikta, og å gje fila nytt namn omdirigerer ikkje ein prosess som framleis held den gamle deskriptoren. Svar først på spørsmålet om mottakaren, og tilpass deretter rotasjonen til korleis skrivaren opnar henne.

Vel mottakaren før rotasjonspolicyen

Ei systemd-eining som allereie sender utdataa sine til journalen, held oppbevaringa på eitt sted. journald handhevar grenser som SystemMaxUse og MaxRetentionSec , så ein watchdog som loggar der, arvar ei grense utan ekstra arbeid. Å leggje til ei andre ubegrensa fil ved sida av doblar vedlikehaldet utan vinning.

Ei dedikert fil fortener plassen sin når noko anna les henne: ein parser, ein revisjonseksport eller ei side som ventar ein stabil stig. Når den avgjerda er teken, treng fila ein eigar, ein modus og ein rotasjonspolicy skriven ned saman, fordi dei tre berre er rette som eit sett. Ein stig som kven som helst kan opprette, er også ein stig som kven som helst kan erstatte, så mappeløyva høyrer i same notatet. Skriv alt dette ved sida av sjekken, og neste endring startar frå dei same fakta.

Skriv blokka tilpassa skrivaren

Start med ein skrivar som opnar stigen ved kvart kall, legg til ei linje og avsluttar. Det mønsteret overlever rotasjon utan noko form for samarbeid frå prosessen, fordi neste køyring opnar fila som for tida ligg på den stigen. Blokka nedanfor held ei veke med versjonar og gjenopprettar fila med den eigaren og modusen skrivaren treng:

/var/log/vpn-watchdog.log {
    daily
    rotate 7
    create 0600 root root
    missingok
    notifempty
}

logrotate-handboka definerer talet som talet på behaldne roterte versjonar, ikkje som ein garanti for sju dagars historikk, og nøkkelordet daily blir vurdert når jobben køyrer i staden for å fungere som sin eigen planleggjar. På dei fleste distribusjonar eig ein systemd-timer eller ei cron-oppføring allereie det kallet, så sjekk kva som finst før du legg til eit andre. Å matche eigarskapet betyr meir enn oppbevaringstalet. Å kopiere ein modus berre for root over på ei fil som blir skriven av ein tenestekonto, stoppar logginga ved neste rotasjon, og feilen viser seg timar seinare som eit utdatert tidsstempel i staden for som ein feil. Stadfest brukaren til skrivaren før du kopierer ei blokk frå ein annan stad.

Ein skrivar som aldri opnar på nytt, treng ei anna løysing

Ein langvarig prosess som held ein open deskriptor, held fram med å skrive til den omdøypte inoden. Plass blir ikkje frigjord, og den synlege fila sluttar å veksa, noko som ser ut som ein øydelagd rotasjon til du sjekkar inoden. Anten lær prosessen å opne på nytt, eller la rotasjonen kopiere og avkorte i staden for å gje nytt namn.

Vegen med å opne på nytt er den reinaste der programvara støttar det: send det dokumenterte signalet eller køyr den dokumenterte kommandoen, og la prosessen opne den nye fila sjølv. Alternativet er copytruncate , som kopierer innhaldet til det roterte namnet og deretter avkortar originalen på staden, slik at deskriptoren blir verande gyldig, men skrivingar som fell mellom kopien og avkortinga, går tapt.

For einingar som blir starta av systemd, peik StandardOutput mot journalen eller mot ei fil og la eininga eige livssyklusen. Ei shell-løkke som legg til via tee -a utan storleiksgrense, er oppsettet som fyller ein partisjon under eit avbrot, fordi ein mislykka sjekk ofte loggar langt meir enn ein sunn.

Test rotasjonen utan å vente på timeren

Feilsøkingsmodus rapporterer kva som ville skje og rører ingenting, noko som gjer han til den trygge første køyringa etter ei endring. Tving fram ein ekte rotasjon når du er nøgd, og stadfest deretter at neste logglinje landar i den nye fila i staden for den omdøypte:

logrotate -d /etc/logrotate.d/vpn-watchdog
logrotate -f /etc/logrotate.d/vpn-watchdog
ls -l /var/log/vpn-watchdog.log*
tail -n 3 /var/log/vpn-watchdog.log
df -h /var/log

Les utdataa i den rekkjefølgja. Feilsøkingskøyringa skal namngje fila og handlingane ho har tenkt; ei tvinga køyring skal produsere det roterte namnet du venta; tail skal vise ei fersk oppføring etter at skrivaren køyrer igjen. Ein veksande df-verdi med ei krympande synleg fil betyr deskriptorproblemet som er skildra ovanfor.

Gjenta den tvinga køyringa to gonger for å sjå korleis oppbevaringa oppfører seg når versjonar allereie finst. Sletting av den eldste fila er det venta resultatet, og ei manglande sletting betyr vanlegvis at talet eller jokerteiknet i det roterte namnet ikkje samsvarar med det logrotate oppretta.

Ta vare på tilbakerulling og skriftleg oversyn

Ta vare på førre blokka før du redigerer, og noter kva planleggjar som køyrer henne, fordi ei tilbakerulling som gjenopprettar fila men ikkje timeren, gjev att halve det opphavlege problemet. Roter éin gong for hand etter gjenopprettinga, og stadfest deretter at kontoen til skrivaren kan skrive på loggstigen. Viss tenesta køyrer under systemd, last eininga på nytt etter kvar endring i omdirigeringa av utdataa, sidan den køyrande prosessen held fram med å skrive til det gamle målet. Les dei neste logglinjene sjølv i staden for å stole på at eininga kom reint tilbake.

Noter modus, eigar, oppbevaringstal og det venta diskbudsjettet ved sida av sjølve sjekken. Når sjekken seinare blir endra frå eit eingongsskript til ein daemon, må rotasjonspolicyen endrast med henne, og det notatet fortel neste person kva føresetnad som braut.

Til slutt, hald loggavgjerda skild frå gjenopprettingsavgjerda. Ein mislykka sjekk bør fylgje den eigne gjenopprettingspolicyen til sambandet, ikkje ein regel som er gøymd inne i logrotate, og ingen loggoppsett bør vere grunnen til at ein fungerande tunnel blir starta på nytt.

Relaterte artiklar