Rotirati dnevnik VPN nadzornika bez lomljenja procesa koji piše
Prvo odaberite odredište, pa uskladite rotaciju s načinom na koji proces koji piše otvara datoteku: preimenovanje za kratke provjere, ponovno otvaranje ili copytruncate za demona.
Provjera zdravlja VPN-a koja svake minute dopisuje jedan red tiho stvara drugu dužnost: odlučiti kako ti redovi napuštaju disk. Popravljanje tunela ne čini ništa za tu dužnost, a preimenovanje datoteke ne preusmjerava proces koji još drži stari deskriptor. Prvo odgovorite na pitanje odredišta, pa uskladite rotaciju s načinom na koji je proces koji piše otvara.
Odaberite odredište prije politike rotacije
systemd jedinica koja već šalje izlaz u journal čuva zadržavanje na jednom mjestu. journald primjenjuje ograničenja kao što su SystemMaxUse i MaxRetentionSec , pa nadzornik koji tamo piše nasljeđuje granicu bez ikakvog dodatnog rada. Dodavanje druge neograničene datoteke pored nje udvostručuje održavanje bez koristi.
Namjenska datoteka zaslužuje svoje mjesto kad je čita nešto drugo: parser, izvoz za reviziju ili stranica koja očekuje stabilnu putanju. Kad je ta odluka donesena, datoteci trebaju vlasnik, način rada i politika rotacije zapisani zajedno, jer su sva tri ispravna samo kao skup. Putanja koju bilo ko može stvoriti ujedno je putanja koju bilo ko može zamijeniti, pa dozvole direktorija pripadaju u istu bilješku. Zapišite sve to uz provjeru i sljedeća izmjena počinje od istih činjenica.
Napišite blok tako da odgovara procesu koji piše
Pođite od procesa koji otvara putanju pri svakom pozivu, dopisuje red i izlazi. Taj obrazac preživljava rotaciju bez ikakve suradnje procesa, jer sljedeće pokretanje otvara datoteku koja trenutačno stoji na toj putanji. Blok ispod čuva tjedan verzija i ponovno stvara datoteku s vlasnikom i načinom rada koji su procesu potrebni:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
logrotate priručnik definira broj kao broj zadržanih rotiranih verzija, a ne kao zajamčenih sedam dana povijesti, a ključna riječ daily procjenjuje se kad se posao izvršava, umjesto da djeluje kao vlastiti planer. Na većini distribucija systemd timer ili cron unos već posjeduje taj poziv, pa provjerite koji postoji prije nego dodate drugi. Podudaranje vlasništva važnije je od broja zadržavanja. Kopiranje načina rada samo za root na datoteku koju piše servisni račun zaustavlja zapisivanje pri sljedećoj rotaciji, a kvar se pojavljuje satima kasnije kao zastarjela vremenska oznaka, a ne kao greška. Potvrdite korisnika procesa prije nego kopirate blok s drugog mjesta.
Proces koji nikad ne otvara ponovno treba drugačiju popravku
Dugotrajni proces koji drži otvoreni deskriptor nastavlja pisati u preimenovani inode. Prostor se ne oslobađa i vidljiva datoteka prestaje rasti, što izgleda kao pokvarena rotacija dok ne provjerite inode. Ili naučite proces da ponovno otvori, ili natjerajte rotaciju da kopira i odsiječe umjesto preimenuje.
Putanja ponovnog otvaranja čišća je gdje je softver podržava: pošaljite dokumentirani signal ili pokrenite dokumentiranu naredbu i pustite proces da sam otvori novu datoteku. Alternativa je copytruncate , koja kopira sadržaj u rotirano ime i zatim odsijeca original na mjestu, pa deskriptor ostaje valjan, ali zapisi koji padnu između kopiranja i odsijecanja se gube.
Za jedinice koje pokreće systemd, usmjerite StandardOutput na journal ili na datoteku i pustite jedinicu da posjeduje životni ciklus. Shell petlja koja dopisuje kroz tee -a bez ograničenja veličine jest raspored koji napuni particiju tijekom ispada, jer neuspješna provjera često zapiše mnogo više od zdrave.
Testirajte rotaciju bez čekanja na timer
Način za otklanjanje pogrešaka izvještava što bi se dogodilo i ništa ne dira, što ga čini sigurnim prvim pokretanjem nakon izmjene. Prisilite stvarnu rotaciju kad ste zadovoljni, zatim potvrdite da sljedeći redak dnevnika pada u novu datoteku, a ne u preimenovanu:
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
Čitajte izlaz tim redom. Prolaz za otklanjanje pogrešaka treba navesti datoteku i radnje koje namjerava; prisilno pokretanje treba proizvesti očekivano rotirano ime; tail treba pokazati svjež unos nakon što proces ponovno radi. Rastuća vrijednost df uz vidljivu datoteku koja se smanjuje znači gore opisani problem s deskriptorom.
Ponovite prisilno pokretanje dvaput da vidite kako se zadržavanje ponaša kad verzije već postoje. Brisanje najstarije datoteke očekivani je rezultat, a izostanak brisanja obično znači da se broj ili zamjenski znak u rotiranom imenu ne podudaraju s onim što je logrotate stvorio.
Sačuvajte vraćanje i pisani zapis
Spremite prethodni blok prije uređivanja i zabilježite koji ga planer pokreće, jer vraćanje koje obnovi datoteku ali ne timer reproducira pola izvornog problema. Nakon obnavljanja zakrenite jednom ručno, zatim potvrdite da račun procesa može pisati na putanju dnevnika. Ako servis radi pod systemd, ponovno učitajte jedinicu nakon svake promjene njezina preusmjeravanja izlaza, jer pokrenuti proces nastavlja pisati na stari cilj. Pročitajte sami sljedećih nekoliko redaka dnevnika umjesto da vjerujete da se jedinica vratila čisto.
Zabilježite način rada, vlasnika, broj zadržavanja i očekivani proračun diska uz samu provjeru. Kad se provjera kasnije promijeni iz jednokratne skripte u demona, politika rotacije mora se promijeniti s njom, a ta bilješka govori sljedećoj osobi koja je pretpostavka pukla.
Na kraju, držite odluku o dnevniku odvojenom od odluke o oporavku. Neuspješna provjera treba slijediti vlastitu politiku oporavka veze, a ne pravilo skriveno u logrotateu, i nijedan raspored zapisivanja ne smije biti razlog da se radni tunel ponovno pokrene.