VPN veselības pārbaude, kas katru minūti pievieno vienu rindu, klusi rada otru pienākumu: izlemt, kā šīs rindas atstāj disku. Tunela labošana šim pienākumam neko nedod, un faila pārdēvēšana neizmaina procesu, kas joprojām tur veco deskriptoru. Vispirms atbildiet uz galamērķa jautājumu, pēc tam saskaņojiet griešanu ar to, kā rakstītājs to atver.

Izvēlieties galamērķi pirms griešanas politikas

systemd vienība, kas jau sūta savu izvadi uz žurnālu, saglabāšanu tur vienā vietā. journald piemēro ierobežojumus, piemēram, SystemMaxUse un MaxRetentionSec , tāpēc uzraugs, kas tur reģistrē, manto ierobežojumu bez papildu darba. Otra neierobežota faila pievienošana tam blakus divkāršo uzturēšanu bez ieguvuma.

Atsevišķs fails iegūst savu vietu, kad to lasa kaut kas cits: parsētājs, audita eksports vai lapa, kas gaida stabilu ceļu. Kad šis lēmums ir pieņemts, failam vajag īpašnieku, režīmu un griešanas politiku, kas rakstīti kopā, jo visi trīs ir pareizi tikai kā kopums. Ceļš, ko var izveidot ikviens, ir arī ceļš, ko var aizstāt ikviens, tāpēc direktorija atļaujas pieder tai pašai piezīmei. Pierakstiet to visu blakus pārbaudei, un nākamais labojums sāksies no tiem pašiem faktiem.

Rakstiet bloku atbilstoši rakstītājam

Sāciet ar rakstītāju, kas katrā izsaukumā atver ceļu, pievieno rindu un beidz darbu. Šis modelis pārdzīvo griešanu bez jebkādas procesa sadarbības, jo nākamā palaišana atver failu, kas pašlaik atrodas šajā ceļā. Zemāk esošais bloks saglabā nedēļu versiju un no jauna izveido failu ar īpašnieku un režīmu, kāds rakstītājam nepieciešams:

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

logrotate rokasgrāmata definē skaitu kā saglabāto pagriezto versiju skaitu, nevis kā garantētu septiņu dienu vēsturi, un atslēgvārds daily tiek novērtēts, kad darbs darbojas, nevis darbojas kā savs plānotājs. Lielākajā daļā distribūciju systemd taimeris vai cron ieraksts jau pārvalda šo izsaukumu, tāpēc pārbaudiet, kurš pastāv, pirms pievienojat otru. Īpašnieka saskaņošana ir svarīgāka par saglabāšanas skaitu. Tikai root paredzēta režīma kopēšana uz failu, ko raksta pakalpojuma konts, apstādina reģistrēšanu nākamajā griešanā, un kļūme parādās stundas vēlāk kā novecojis laika zīmogs, nevis kā kļūda. Apstipriniet rakstītāja lietotāju, pirms kopējat bloku no citurienes.

Rakstītājam, kas nekad neatver no jauna, vajag citu risinājumu

Ilgstoši darbojošs process, kas tur atvērtu deskriptoru, turpina rakstīt pārdēvētajā inode. Vieta netiek atbrīvota, un redzamais fails pārstāj augt, kas izskatās kā salauzta griešana, līdz pārbaudāt inode. Vai nu iemāciet procesam atkārtoti atvērt, vai lieciet griešanai kopēt un apgriezt, nevis pārdēvēt.

Atkārtotas atvēršanas ceļš ir tīrākais tur, kur programmatūra to atbalsta: nosūtiet dokumentēto signālu vai palaidiet dokumentēto komandu, un ļaujiet procesam pašam atvērt jauno failu. Alternatīva ir copytruncate , kas kopē saturu uz pagriezto nosaukumu un pēc tam apgriež oriģinālu tā vietā, tāpēc deskriptors paliek derīgs, bet ieraksti starp kopēšanu un apgriešanu tiek zaudēti.

Vienībām, ko palaiž systemd, novirziet StandardOutput uz žurnālu vai uz failu un ļaujiet vienībai pārvaldīt dzīves ciklu. Shell cilpa, kas pievieno caur tee -a bez izmēra ierobežojuma, ir tā kārtība, kas pārtraukuma laikā aizpilda nodalījumu, jo neizdevusies pārbaude bieži reģistrē daudz vairāk nekā vesela.

Pārbaudiet griešanu, negaidot taimeri

Atkļūdošanas režīms ziņo, kas notiktu, un neko neaiztiek, tāpēc tas ir drošā palaišana pēc labojuma. Kad esat apmierināts, piespiediet īstu griešanu, pēc tam apstipriniet, ka nākamā žurnāla rinda nonāk jaunajā failā, nevis pārdēvētajā:

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

Lasiet izvadi šādā secībā. Atkļūdošanas gaitā jānosauc fails un paredzētās darbības; piespiedu palaišanā jārada sagaidītais pagrieztais nosaukums; tail jāparāda jauns ieraksts pēc tam, kad rakstītājs atkal darbojas. Augoša df vērtība ar sarūkošu redzamu failu nozīmē iepriekš aprakstīto deskriptora problēmu.

Atkārtojiet piespiedu palaišanu divreiz, lai redzētu, kā saglabāšana uzvedas, kad versijas jau pastāv. Vecākā faila dzēšana ir gaidītais rezultāts, un dzēšanas trūkums parasti nozīmē, ka skaits vai aizstājējzīme pagrieztajā nosaukumā neatbilst tam, ko izveidoja logrotate.

Saglabājiet atritināšanas iespēju un rakstisku pierakstu

Saglabājiet iepriekšējo bloku pirms labošanas un atzīmējiet, kurš plānotājs to izpilda, jo atritināšana, kas atjauno failu, bet ne taimeri, atkārto pusi no sākotnējās problēmas. Pēc atjaunošanas vienreiz pagrieziet ar roku, pēc tam apstipriniet, ka rakstītāja konts var rakstīt žurnāla ceļā. Ja pakalpojums darbojas zem systemd, pēc jebkuras tā izvades novirzīšanas izmaiņas atkārtoti ielādējiet vienību, jo darbojošais process turpina rakstīt uz veco mērķi. Izlasiet nākamās dažas žurnāla rindas pats, tā vietā lai paļautos, ka vienība atgriezās tīri.

Pierakstiet režīmu, īpašnieku, saglabāšanas skaitu un paredzamo diska budžetu blakus pašai pārbaudei. Kad vēlāk pārbaude no vienreizēja skripta kļūs par dēmonu, griešanas politikai ir jāmainās kopā ar to, un šī piezīme pasaka nākamajam cilvēkam, kāds pieņēmums sabruka.

Visbeidzot, turiet žurnāla lēmumu atsevišķi no atjaunošanas lēmuma. Neizdevusies pārbaude ir jāvada pašas savienojuma atjaunošanas politikai, nevis logrotate iekšienē paslēptam noteikumam, un nevienai reģistrēšanas kārtībai nevajadzētu būt iemeslam, kāpēc darbojošs tunelis tiek restartēts.

Saistītie raksti