Zungusha kumbukumbu ya mlinzi wa VPN bila kuvunja mwandishi
Amua kwanza lengwa, kisha oanisha mzunguko na jinsi mwandishi anavyofungua faili: badilisha jina kwa ukaguzi mfupi, fungua tena au copytruncate kwa daemon.
Ukaguzi wa afya wa VPN unaoongeza mstari mmoja kwa dakika huunda kwa utulivu wajibu wa pili: kuamua jinsi mistari hiyo inavyoondoka kwenye diski. Kurekebisha handaki hakufanyi chochote kwa wajibu huo, na kubadilisha jina la faili hakuelekeza upya mchakato ambao bado umeshikilia maelezo ya zamani. Jibu kwanza swali la lengwa, kisha oanisha mzunguko na jinsi mwandishi anavyofungua faili.
Chagua lengwa kabla ya sera ya mzunguko
Kitengo cha systemd ambacho tayari kinatuma matokeo yake kwenye jarida huweka uhifadhi mahali pamoja. journald hutekeleza mipaka kama SystemMaxUse na MaxRetentionSec , kwa hiyo mlinzi anayeandika hapo hurithi mpaka bila kazi ya ziada. Kuongeza faili ya pili isiyo na kikomo kando yake huongeza mara mbili matengenezo bila faida.
Faili maalum hupata nafasi yake wakati kitu kingine kinaisoma: kichanganuzi, usafirishaji wa ukaguzi au ukurasa unaotarajia njia thabiti. Baada ya uamuzi huo kufanywa, faili inahitaji mmiliki, modi na sera ya mzunguko zilizoandikwa pamoja, kwa sababu zote tatu ni sahihi tu kama seti. Njia ambayo mtu yeyote anaweza kuunda pia ni njia ambayo mtu yeyote anaweza kubadilisha, kwa hiyo ruhusa za saraka ni za noti hiyo hiyo. Andika yote hayo kando ya ukaguzi na uhariri unaofuata utaanza kutoka ukweli huo huo.
Andika kizuizi kinacholingana na mwandishi
Anza na mwandishi anayefungua njia kwa kila wito, anaongeza mstari na anatoka. Mtindo huo hustahimili mzunguko bila ushirikiano wowote kutoka kwa mchakato, kwa sababu uendeshaji unaofuata hufungua faili ambayo kwa sasa iko kwenye njia hiyo. Kizuizi kilicho hapa chini huhifadhi wiki moja ya matoleo na huunda upya faili kwa mmiliki na modi anazohitaji mwandishi:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
Mwongozo wa logrotate unafafanua hesabu kama idadi ya matoleo yaliyozungushwa yaliyohifadhiwa, si kama uhakika wa siku saba za historia, na neno kuu daily hutathminiwa wakati kazi inapoendeshwa badala ya kufanya kazi kama kipanga muda chake. Katika usambazaji mwingi kipima muda cha systemd au ingizo la cron tayari linamiliki wito huo, kwa hiyo angalia lipi lipo kabla ya kuongeza la pili. Kulinganisha umiliki ni muhimu zaidi kuliko idadi ya uhifadhi. Kunakili modi ya root pekee kwenye faili inayoandikwa na akaunti ya huduma huacha uandishi kwenye mzunguko unaofuata, na hitilafu huonekana saa kadhaa baadaye kama muhuri wa muda uliopitwa na wakati badala ya kama kosa. Thibitisha mtumiaji wa mwandishi kabla ya kunakili kizuizi kutoka mahali pengine.
Mwandishi asiyefungua tena kamwe anahitaji tiba nyingine
Mchakato wa muda mrefu unaoshikilia maelezo wazi huendelea kuandika kwenye inode iliyobadilishwa jina. Nafasi haifunguliwi na faili inayoonekana huacha kukua, jambo ambalo linaonekana kama mzunguko uliovunjika hadi utakapokagua inode. Ama mfundishe mchakato kufungua tena, au fanya mzunguko unakili na ukate badala ya kubadilisha jina.
Njia ya kufungua tena ni safi zaidi pale programu inapoiunga mkono: tuma ishara iliyoandikwa au endesha amri iliyoandikwa, na uache mchakato ufungue faili mpya wenyewe. Njia mbadala ni copytruncate , ambayo hunakili maudhui kwenye jina lililozungushwa kisha hukata asili mahali pake, kwa hiyo maelezo yanabaki halali lakini maandishi yanayoanguka kati ya kunakili na kukata hupotea.
Kwa vitengo vinavyoanzishwa na systemd, elekeza StandardOutput kwenye jarida au kwenye faili na uache kitengo kimiliki mzunguko wa maisha. Kitanzi cha shell kinachoongeza kupitia tee -a bila kikomo cha ukubwa ndicho kipangilio kinachojaza kizigeu wakati wa hitilafu, kwa sababu ukaguzi unaoshindwa mara nyingi huandika mengi zaidi kuliko ulio sawa.
Jaribu mzunguko bila kusubiri kipima muda
Hali ya utatuzi huripoti kitakachotokea na haigusi chochote, jambo ambalo huifanya kuwa uendeshaji wa kwanza salama baada ya uhariri. Lazimisha mzunguko halisi ukiwa umeridhika, kisha thibitisha kwamba mstari unaofuata wa kumbukumbu unatua kwenye faili mpya badala ya ile iliyobadilishwa jina:
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
Soma matokeo kwa mpangilio huo. Hatua ya utatuzi inapaswa kutaja faili na vitendo inavyokusudia; uendeshaji wa kulazimishwa unapaswa kutoa jina lililozungushwa linalotarajiwa; tail inapaswa kuonyesha ingizo jipya baada ya mwandishi kuendeshwa tena. Thamani ya df inayokua pamoja na faili inayoonekana kupungua inamaanisha tatizo la maelezo lililoelezwa hapo juu.
Rudia uendeshaji wa kulazimishwa mara mbili ili kuona jinsi uhifadhi unavyotenda wakati matoleo yapo tayari. Kufuta faili ya zamani zaidi ndiyo matokeo yanayotarajiwa, na kukosekana kwa kufuta kwa kawaida humaanisha kwamba hesabu au alama ya wildcard kwenye jina lililozungushwa hailingani na kile logrotate iliunda.
Hifadhi uwezekano wa kurudi nyuma na kumbukumbu iliyoandikwa
Hifadhi kizuizi cha awali kabla ya kuhariri, na uandike ni kipanga muda gani kinakiendesha, kwa sababu kurudisha nyuma kunakorejesha faili lakini si kipima muda hurudia nusu ya tatizo la awali. Zungusha mara moja kwa mkono baada ya kurejesha, kisha thibitisha kwamba akaunti ya mwandishi inaweza kuandika kwenye njia ya kumbukumbu. Ikiwa huduma inaendeshwa chini ya systemd, pakia upya kitengo baada ya mabadiliko yoyote katika uelekezaji upya wa matokeo yake, kwa sababu mchakato unaoendelea huendelea kuandika kwenye lengo la zamani. Soma mistari ya kumbukumbu inayofuata mwenyewe badala ya kuamini kwamba kitengo kilirudi kikiwa safi.
Andika modi, mmiliki, idadi ya uhifadhi na bajeti ya diski inayotarajiwa kando ya ukaguzi wenyewe. Wakati ukaguzi baadaye unabadilika kutoka script ya mara moja hadi daemon, sera ya mzunguko lazima ibadilike pamoja nao, na noti hiyo humwambia mtu anayefuata ni dhana gani iliyovunjika.
Mwishowe, weka uamuzi wa kumbukumbu kando na uamuzi wa urejeshaji. Ukaguzi ulioshindwa unapaswa kufuata sera ya urejeshaji ya muunganisho wenyewe, si kanuni iliyofichwa ndani ya logrotate, na hakuna mpangilio wowote wa uandishi unapaswa kuwa sababu ya kuanzisha upya handaki inayofanya kazi.