Vrteti dnevnik VPN nadzornika brez zloma pisca
Najprej izberite cilj, nato prilagodite vrtenje načinu, kako pisec odpira datoteko: preimenovanje za kratke preglede, ponovno odpiranje ali copytruncate za demona.
Preverjanje stanja VPN, ki vsako minuto doda eno vrstico, tiho ustvari drugo dolžnost: odločiti, kako te vrstice zapustijo disk. Popravilo tunela za to dolžnost ne naredi ničesar, preimenovanje datoteke pa ne preusmeri procesa, ki še vedno drži stari deskriptor. Najprej odgovorite na vprašanje o cilju, nato prilagodite vrtenje načinu, kako ga pisec odpre.
Izberite cilj pred politiko vrtenja
Enota systemd, ki svoj izhod že pošilja v dnevnik, hrani zadrževanje na enem mestu. journald uveljavlja omejitve, kot sta SystemMaxUse in MaxRetentionSec , zato nadzornik, ki tam beleži, podeduje mejo brez dodatnega dela. Dodajanje druge neomejene datoteke ob njej podvoji vzdrževanje brez koristi.
Namenska datoteka si svoje mesto prisluži, ko jo bere nekaj drugega: razčlenjevalnik, izvoz za revizijo ali stran, ki pričakuje stabilno pot. Ko je ta odločitev sprejeta, datoteka potrebuje lastnika, način in politiko vrtenja, zapisane skupaj, ker so vse tri pravilne le kot sklop. Pot, ki jo lahko ustvari kdorkoli, je tudi pot, ki jo lahko nadomesti kdorkoli, zato dovoljenja mape spadajo v isto opombo. Zapišite vse to ob preverjanju in naslednje urejanje se bo začelo z istimi dejstvi.
Napišite blok, ki ustreza piscu
Začnite s piscem, ki pot odpre ob vsakem klicu, doda vrstico in konča. Ta vzorec preživi vrtenje brez kakršnega koli sodelovanja procesa, ker naslednji zagon odpre datoteko, ki trenutno leži na tej poti. Spodnji blok hrani teden različic in znova ustvari datoteko z lastnikom in načinom, ki jih pisec potrebuje:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
Priročnik logrotate določa število kot število ohranjenih zavrtenih različic, ne kot jamstvo za sedem dni zgodovine, in ključna beseda daily se ovrednoti ob izvajanju opravila, namesto da bi delovala kot lasten razporejevalnik. V večini distribucij ta klic že pripada časovniku systemd ali vnosu cron, zato preverite, kateri obstaja, preden dodate drugega. Ujemanje lastništva je pomembnejše od števila zadrževanja. Kopiranje načina samo za root na datoteko, ki jo piše servisni račun, ustavi beleženje ob naslednjem vrtenju, napaka pa se pojavi ure kasneje kot zastarel časovni žig, ne kot napaka. Preden kopirate blok od drugod, potrdite uporabnika pisca.
Pisec, ki nikoli ne odpre znova, potrebuje drugačno zdravilo
Dolgo delujoč proces, ki drži odprt deskriptor, še naprej piše v preimenovani inode. Prostor se ne sprosti in vidna datoteka preneha rasti, kar je videti kot pokvarjeno vrtenje, dokler ne preverite inode. Procesu bodisi priučite ponovno odpiranje bodisi poskrbite, da vrtenje kopira in odreže namesto preimenovanja.
Pot ponovnega odpiranja je čistejša tam, kjer jo programska oprema podpira: pošljite dokumentirani signal ali zaženite dokumentirani ukaz in pustite procesu, da sam odpre novo datoteko. Alternativa je copytruncate , ki kopira vsebino v zavrteno ime in nato odreže izvirnik na mestu, tako da deskriptor ostane veljaven, vendar se zapisi med kopiranjem in odrezom izgubijo.
Pri enotah, ki jih zažene systemd, usmerite StandardOutput v dnevnik ali v datoteko in pustite enoti, da ima življenjski cikel. Shell zanka, ki dodaja prek tee -a brez omejitve velikosti, je ureditev, ki med izpadom napolni particijo, ker neuspešno preverjanje pogosto zabeleži veliko več kot zdravo.
Preizkusite vrtenje, ne da bi čakali na časovnik
Način za odpravljanje napak poroča, kaj bi se zgodilo, in se ničesar ne dotakne, zato je varen prvi zagon po spremembi. Ko ste zadovoljni, vsilite pravo vrtenje, nato potrdite, da naslednja vrstica dnevnika pristane v novi datoteki in ne v preimenovani:
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
Preberite izhod v tem vrstnem redu. Prehod za odpravljanje napak naj bi poimenoval datoteko in predvidena dejanja; vsiljeni zagon naj bi ustvaril pričakovano zavrteno ime; tail naj bi pokazal nov vnos po ponovnem zagonu pisca. Rastoča vrednost df s krčilno vidno datoteko pomeni zgoraj opisano težavo z deskriptorjem.
Ponovite vsiljeni zagon dvakrat, da vidite, kako se zadrževanje obnaša, ko različice že obstajajo. Brisanje najstarejše datoteke je pričakovani rezultat, manjkajoče brisanje pa običajno pomeni, da se število ali nadomestni znak v zavrtenem imenu ne ujema s tem, kar je ustvaril logrotate.
Ohranite razveljavitev in pisni zapis
Pred urejanjem shranite prejšnji blok in zabeležite, kateri razporejevalnik ga izvaja, ker razveljavitev, ki obnovi datoteko, ne pa časovnika, ponovi polovico prvotne težave. Po obnovitvi enkrat zavrtite ročno, nato potrdite, da lahko račun pisca piše na pot dnevnika. Če storitev deluje pod systemd, po vsaki spremembi preusmeritve njenega izhoda znova naložite enoto, ker delujoči proces še naprej piše v stari cilj. Naslednjih nekaj vrstic dnevnika preberite sami, namesto da bi zaupali, da se je enota vrnila čisto.
Zabeležite način, lastnika, število zadrževanja in pričakovani diskovni proračun ob samem preverjanju. Ko se preverjanje pozneje spremeni iz enkratne skripte v demona, se mora politika vrtenja spremeniti z njim, in ta opomba pove naslednji osebi, katera predpostavka se je zlomila.
Nazadnje, hranite odločitev o dnevniku ločeno od odločitve o obnovitvi. Neuspešno preverjanje naj sledi lastni politiki obnovitve povezave, ne pravilu, skritemu v logrotate, in nobena ureditev beleženja ne bi smela biti razlog za ponovni zagon delujočega tunela.