VPN-ի առողջության ստուգումը, որը ամեն րոպե մեկ տող է ավելացնում, լուռ ստեղծում է երկրորդ պարտականություն՝ որոշել, թե ինչպես են այդ տողերը լքում սկավառակը։ Թունելը վերանորոգելը ոչինչ չի անում այդ պարտականության համար, իսկ ֆայլը վերանվանելը չի վերաուղղորդում գործընթացը, որը դեռ պահում է հին նկարագրիչը։ Նախ պատասխանեք ստացողի հարցին, ապա պտտումը համապատասխանեցրեք նրան, թե ինչպես է գրողը բացում այն։

Ստացողն ընտրեք պտտման քաղաքականությունից առաջ

systemd միավորը, որն արդեն իր ելքը ուղարկում է մատյան, պահպանումը պահում է մեկ տեղում։ journald-ը կիրառում է սահմաններ, ինչպիսիք են SystemMaxUse և MaxRetentionSec , ուստի այնտեղ գրանցող հսկիչը ժառանգում է սահման առանց լրացուցիչ աշխատանքի։ Կողքին երկրորդ անսահմանափակ ֆայլ ավելացնելը կրկնապատկում է պահպանումը՝ առանց օգուտի։

Առանձին ֆայլը վաստակում է իր տեղը, երբ ուրիշ բան կարդում է այն՝ վերլուծիչ, աուդիտի արտահանում կամ էջ, որը սպասում է կայուն ուղու։ Այդ որոշումից հետո ֆայլին պետք են տեր, ռեժիմ և պտտման քաղաքականություն, որոնք գրվում են միասին, որովհետև երեքը ճիշտ են միայն որպես հավաքածու։ Ուղին, որը կարող է ստեղծել ցանկացածը, նաև ուղի է, որը կարող է փոխարինել ցանկացածը, ուստի պանակի թույլտվությունները պատկանում են նույն նշումին։ Գրեք այդ ամենը ստուգման կողքին, և հաջորդ խմբագրումը կսկսվի նույն փաստերից։

Գրեք բլոկը գրողին համապատասխան

Սկսեք գրողից, որը բացում է ուղին ամեն կանչի ժամանակ, ավելացնում է տող և դուրս գալիս։ Այդ ձևը վերապրում է պտտումը առանց գործընթացի որևէ համագործակցության, որովհետև հաջորդ գործարկումը բացում է այն ֆայլը, որն այդ պահին գտնվում է այդ ուղու վրա։ Ստորև բլոկը պահում է մեկ շաբաթ տարբերակներ և վերստեղծում է ֆայլը գրողին անհրաժեշտ տիրոջ և ռեժիմի հետ:

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

logrotate-ի ձեռնարկը քանակը սահմանում է որպես պահվող պտտված տարբերակների թիվ, այլ ոչ թե որպես յոթ օրվա պատմության երաշխիք, և daily բանալի բառը գնահատվում է աշխատանքի գործարկման պահին՝ փոխարենը ինքնուրույն պլանավորիչ լինելու։ Հետադարձումների մեծ մասում systemd ժամաչափը կամ cron գրառումը արդեն տիրում է այդ կանչին, ուստի ստուգեք, թե որն է գոյություն ունի, նախքան երկրորդը ավելացնելը։ Տիրապետության համընկնումը ավելի կարևոր է, քան պահպանման քանակը։ Միայն root-ի ռեժիմը ծառայության հաշվի գրած ֆայլի վրա պատճենելը դադարեցնում է գրանցումը հաջորդ պտտման ժամանակ, և ձախողումը երևում է ժամեր անց որպես հնացած ժամադրոշմ, այլ ոչ թե որպես սխալ։ Հաստատեք գրողի օգտատիրոջը, նախքան այլ տեղից բլոկ պատճենելը։

Գրողը, որը երբեք չի վերաբացվում, այլ լուծում է պահանջում

Երկար գործող գործընթացը, որը պահում է բաց նկարագրիչ, շարունակում է գրել վերանվանված inode-ին։ Տարածքը չի ազատվում, և տեսանելի ֆայլը դադարում է աճել, ինչը կոտրված պտտման տեսք ունի, մինչև չստուգեք inode-ը։ Կամ սովորեցրեք գործընթացին վերաբացվել, կամ ստիպեք պտտմանը պատճենել և կտրել՝ վերանվանելու փոխարեն։

Վերաբացման ուղին ավելի մաքուր է այնտեղ, որտեղ ծրագիրը դա աջակցում է՝ ուղարկեք փաստաթղթավորված ազդանշանը կամ գործարկեք փաստաթղթավորված հրամանը, և թող գործընթացն ինքը բացի նոր ֆայլը։ Այլընտրանքը copytruncate է, որը բովանդակությունը պատճենում է պտտված անվան վրա, ապա կտրում բնօրինակը տեղում, այնպես որ նկարագրիչը մնում է վավեր, բայց պատճենման և կտրման միջև ընկած գրառումները կորչում են։

systemd-ի կողմից սկսված միավորների համար StandardOutput-ը ուղղեք մատյանին կամ ֆայլին, և թող միավորը տիրի կյանքի ցիկլին։ Shell-ի հանգույցը, որն ավելացնում է tee -a-ի միջոցով առանց չափի սահմանի, այն դասավորությունն է, որը խափանման ժամանակ լցնում է բաժինը, որովհետև ձախողված ստուգումը հաճախ գրանցում է շատ ավելին, քան առողջը։

Փորձարկեք պտտումը՝ չսպասելով ժամաչափին

Վրիպազերծման ռեժիմը հաղորդում է, թե ինչ կլիներ, և ոչնչի չի դիպչում, ինչը դարձնում է այն խմբագրումից հետո առաջին անվտանգ գործարկումը։ Երբ գոհ եք, ստիպեք իրական պտտում, ապա հաստատեք, որ հաջորդ մատյանի տողը ընկնում է նոր ֆայլի մեջ, այլ ոչ վերանվանվածի:

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

Կարդացեք ելքը այդ հերթականությամբ։ Վրիպազերծման անցումը պետք է անվանի ֆայլը և նախատեսված գործողությունները. հարկադիր գործարկումը պետք է արտադրի ակնկալվող պտտված անունը. tail-ը պետք է ցույց տա թարմ գրառում այն բանից հետո, երբ գրողը նորից գործարկվի։ Աճող df արժեքը և նվազող տեսանելի ֆայլը նշանակում են վերը նկարագրված նկարագրիչի խնդիրը։

Կրկնեք հարկադիր գործարկումը երկու անգամ՝ տեսնելու, թե ինչպես է պահպանումը վարվում, երբ տարբերակներն արդեն գոյություն ունեն։ Ամենահին ֆայլը ջնջելը ակնկալվող արդյունքն է, և բացակայող ջնջումը սովորաբար նշանակում է, որ պտտված անվան մեջ քանակը կամ նիշը չեն համապատասխանում logrotate-ի ստեղծածին։

Պահպանեք հետադարձի հնարավորություն և գրավոր արձանագրություն

Խմբագրելուց առաջ պահպանեք նախորդ բլոկը և նշեք, թե որ պլանավորիչն է գործարկում այն, որովհետև ֆայլը վերականգնող, բայց ժամաչափը ոչ՝ հետադարձը վերարտադրում է սկզբնական խնդրի կեսը։ Վերականգնումից հետո մեկ անգամ ձեռքով պտտեք, ապա հաստատեք, որ գրողի հաշիվը կարող է գրել մատյանի ուղու վրա։ Եթե ծառայությունը գործում է systemd-ի ներքո, վերաբեռնեք միավորը դրա ելքի վերաուղղորդման ցանկացած փոփոխությունից հետո, որովհետև գործող գործընթացը շարունակում է գրել հին նպատակակետին։ Ինքներդ կարդացեք հաջորդ մի քանի մատյանի տողերը՝ փոխարենը վստահելու, որ միավորը մաքուր վերադարձավ։

Գրանցեք ռեժիմը, տերոջը, պահպանման քանակը և ակնկալվող սկավառակի բյուջեն հենց ստուգման կողքին։ Երբ հետագայում ստուգումը մեկանգամյա սկրիպտից դառնա դեմոն, պտտման քաղաքականությունը պետք է փոխվի նրա հետ, և այդ նշումն է, որ հաջորդ մարդուն ասում է, թե որ ենթադրությունը կոտրվեց։

Վերջապես, մատյանի որոշումը առանձին պահեք վերականգնման որոշումից։ Ձախողված ստուգումը պետք է հետևի կապի սեփական վերականգնման քաղաքականությանը, ոչ թե logrotate-ի մեջ թաքնված կանոնին, և ոչ մի գրանցման դասավորություն չպետք է լինի աշխատող թունելը վերագործարկելու պատճառ։

Առնչվող հոդվածներ