Roteer ’n VPN-waghondlog sonder om die skrywer te breek
Kies eers die bestemming en laat die rotasie dan pas by hoe die skrywer die lêer oopmaak: hernoem vir kortstondige kontroles, heropen of copytruncate vir ’n daemon.
’n VPN-gesondheidskontrole wat elke minuut een reël byskryf, skep stilweg ’n tweede taak: om te besluit hoe daardie reëls die skyf verlaat. Om die tonnel reg te maak, doen niks vir daardie taak nie, en om die lêer te hernoem, herlei nie ’n proses wat steeds die ou deskriptor hou nie. Beantwoord eers die bestemmingsvraag en laat die rotasie dan pas by die manier waarop die skrywer dit oopmaak.
Kies die bestemming voor die rotasiebeleid
’n systemd-eenheid wat reeds sy uitset na die joernaal stuur, hou die bewaartyd op een plek. journald dwing perke soos SystemMaxUse en MaxRetentionSec af, so ’n waghond wat daar log, erf ’n perk sonder enige ekstra werk. Om ’n tweede onbegrensde lêer daarby te voeg, verdubbel die instandhouding sonder wins.
’n Toegewyde lêer verdien sy plek wanneer iets anders dit lees: ’n ontleder, ’n oudit-uitvoer of ’n bladsy wat ’n stabiele pad verwag. Sodra daardie besluit geneem is, het die lêer ’n eienaar, ’n modus en ’n rotasiebeleid nodig wat saam neergeskryf word, want die drie is net as ’n stel korrek. ’n Pad wat enigiemand kan skep, is ook ’n pad wat enigiemand kan vervang, so die gidsregte hoort in dieselfde nota. Skryf dit alles langs die kontrole neer, dan begin die volgende wysiging met dieselfde feite.
Skryf die strofe om by die skrywer te pas
Begin by ’n skrywer wat die pad by elke oproep oopmaak, een reël byskryf en uitgaan. Daardie patroon oorleef rotasie sonder enige samewerking van die proses, want die volgende lopie maak die lêer oop wat tans op daardie pad sit. Die strofe hieronder hou ’n week se weergawes en skep die lêer weer met die eienaar en modus wat die skrywer nodig het:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
Die logrotate-handleiding definieer die aantal as die getal geroteerde weergawes wat gehou word, nie as ’n gewaarborgde sewe dae se geskiedenis nie, en die daily-sleutelwoord word geëvalueer wanneer die taak loop eerder as om as sy eie skeduleerder op te tree. Op die meeste verspreidings besit ’n systemd-timer of ’n cron-inskrywing reeds daardie oproep, so kyk watter een bestaan voordat jy ’n tweede byvoeg. Om die eienaarskap te laat pas, is belangriker as die bewaargetal. Om ’n modus wat net vir root is op ’n lêer te kopieer wat deur ’n diensrekening geskryf word, stop die log by die volgende rotasie, en die fout verskyn ure later as ’n verouderde tydstempel eerder as as ’n fout. Bevestig die skrywer se gebruiker voordat jy ’n strofe van elders kopieer.
’n Skrywer wat nooit weer oopmaak nie, het ’n ander oplossing nodig
’n Langdurige proses wat ’n oop deskriptor hou, bly na die hernoemde inode skryf. Spasie word nie vrygestel nie en die sigbare lêer hou op groei, wat soos ’n gebreekte rotasie lyk totdat jy die inode nagaan. Leer óf die proses om weer oop te maak, óf laat die rotasie kopieer en afkap in plaas van hernoem.
Die heropenpad is die skoner een waar die sagteware dit ondersteun: stuur die gedokumenteerde sein of voer die gedokumenteerde opdrag uit, en laat die proses self die nuwe lêer oopmaak. Die alternatief is copytruncate, wat die inhoud na die geroteerde naam kopieer en dan die oorspronklike in plek afkap, sodat die deskriptor geldig bly maar skryfwerk tussen die kopie en die afkap verlore gaan.
Vir eenhede wat deur systemd begin word, rig StandardOutput op die joernaal of op ’n lêer en laat die eenheid die lewensiklus besit. ’n Skulp-lus wat deur tee -a byskryf sonder ’n grootteperk, is die reëling wat ’n partisie tydens ’n onderbreking vol maak, want ’n mislukte kontrole log dikwels baie meer as ’n gesonde een.
Toets die rotasie sonder om op die timer te wag
Ontfoutmodus rapporteer wat sou gebeur en raak niks, wat dit die veilige eerste lopie na ’n wysiging maak. Forseer ’n werklike rotasie sodra jy tevrede is, en bevestig dan dat die volgende logreël in die nuwe lêer beland eerder as in die hernoemde een:
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
Lees die uitset in daardie volgorde. Die ontfoutlopie behoort die lêer en die aksies wat dit beoog te noem; ’n geforseerde lopie behoort die geroteerde naam te lewer wat jy verwag het; die tail-opdrag behoort ’n vars inskrywing te wys nadat die skrywer weer loop. ’n Groeiende df-waarde met ’n krimpende sigbare lêer beteken die deskriptorprobleem hierbo beskryf.
Herhaal die geforseerde lopie twee keer om te sien hoe die bewaring werk wanneer weergawes reeds bestaan. Om die oudste lêer te verwyder is die verwagte uitkoms, en ’n ontbrekende verwydering beteken gewoonlik dat die getal of die jokerteken in die geroteerde naam nie pas by wat logrotate geskep het nie.
Hou ’n terugrol en ’n geskrewe rekord
Stoor die vorige strofe voor jy wysig, en let op watter skeduleerder dit loop, want ’n terugrol wat die lêer maar nie die timer herstel nie, reproduseer die helfte van die oorspronklike probleem. Roteer een keer met die hand ná die herstel, en bevestig dan dat die logpad deur die skrywer se rekening beskryfbaar is. As die diens onder systemd loop, herlaai die eenheid ná enige verandering aan sy uitset-herleiding, want die lopende proses bly na die ou teiken skryf. Lees die volgende paar logreëls self in plaas daarvan om te vertrou dat die eenheid skoon teruggekom het.
Teken die modus, die eienaar, die bewaargetal en die verwagte skyfbegroting langs die kontrole self aan. Wanneer die kontrole later van ’n eenmalige skrip na ’n daemon verander, moet die rotasiebeleid saam verander, en daardie nota is wat die volgende persoon vertel watter aanname gebreek het.
Hou laastens die logbesluit apart van die herstelbesluit. ’n Mislukte ondersoek moet die verbinding se eie herstelbeleid volg, nie ’n reël wat in logrotate weggesteek is nie, en geen logreëling moet die rede wees dat ’n werkende tonnel herbegin word nie.