Մեր վոչդոգը վերագործարկել է այն ծառայությունները, որոնք մենք կանգնեցրել էինք հատուկ
Օպերացիաներ
Մեր վոչդոգներից մեկը միացնում է մեր այն ծառայությունները, որոնք միացված են, բայց չեն աշխատում։ Հոկտեմբերին երկու անգամ այն միացրել է ծառայություններ, որոնք մենք կանգնեցրել էինք հատուկ։ Երկրորդ անգամ մեր կայքերից մեկի այցելուները մոտ 45 րոպե սխալներ են ստացել։
Ինչու է այդ վոչդոգը գոյություն ունենում
Ծառայությունը, որը մաքուր ելք է կատարում SIGTERM ստանալիս, օրինակ՝ որովհետև ինչ-որ բան այն կանգնեցրել է անունով, systemd-ի համար «ձախողված» չէ։ Restart=on-failure-ը այն չի վերականգնում, և systemctl --failed-ը այն ցուցակում չի նշում։ Այն մնում է կանգնեցված մինչև ինչ-որ մեկը պատահաբար նկատի։ Ուստի վոչդոգը փնտրում է միացված, բայց չաշխատող ծառայություններ և միացնում դրանք։
Խնդիրն այն է, որ ձեռքով կանգնեցրած ծառայությունը ճիշտ նույն տեսքն ունի։
Առաջին անգամ
Հոկտեմբերի 7-ին մենք կանգնեցրել ենք տեսաբանական աշխատողին systemctl stop-ով՝ 12:47-ին, աշխատանքային հերթը խմբագրելու համար։ 12:55-ին այն նորից աշխատում էր. վոչդոգը միացրել էր այն։
Երկրորդ անգամ
Հոկտեմբերի 21-ին մեզ անհրաժեշտ էր մեքենայի հիշողությունը, որը նաև սպասարկում է մեր երկու կայքերը մոդելի թեստի համար։ Սկրիպտը կանգնեցրեց կայքերի վեբ հավելվածները, սինխրոնացման աշխատանքը և տվյալների բազայի կոնտեյները, նորից systemctl stop-ով։ Մոտ հինգ րոպե անց կայքերը հսկող տայմերը, իսկ 19:14-ին՝ վոչդոգը, վերականգնեցին թունելը և վեբ հավելվածները։
Թունելը նորից ընդունում էր երթևեկություն, բայց վեբ հավելվածները չէին կարողանում պատասխանել. թեստավորվող մոդելը զբաղեցրել էր մեքենայի հիշողության 114 GiB-ը։ Մոտ 19:14-ից 20:00 որոշ այցելուներ 502 սխալներ էին ստանում։ 20:00-ին մենք անջատեցինք թունելը, վեբ հավելվածները և սինխրոնացման աշխատանքը, և կանգնեցրինք հսկող տայմերը։
Կանոնը, որն այժմ օգտագործում ենք
- Դադարեցրեք ծառայությունը՝ անջատելով այն.
sudo systemctl disable --now <unit>։ Վերականգնեք այն՝sudo systemctl enable --now <unit>։ Մեր վոչդոգը նայում է միայն միացված ծառայություններին, ուստի անջատվածը մնում է անտեսված։ - Դադարեցրեք ամեն ինչ, ինչը կարող է վերականգնել այն. դրա առջևի թունելը և ցանկացած տայմեր, որը հսկում է այն։
- Կարճ կանգնեցումը մրցավազք է. Եթե օգտագործում եք միայն
stop-ը, ավարտեք մինչև հաջորդ ստուգումը, որը մեր մեքենաներում տեղի է ունենում րոպեների ընթացքում։
Նույն ամիսներից ևս երկու systemd թակարդ
systemctl mask --runtimeհրամանը ոչինչ չի անում /etc/systemd/system-ում գտնվող միավորի ֆայլի համար։ /etc-ում գտնվող միավորները առաջնահերթություն ունեն /run-ում գտնվող runtime mask-ի նկատմամբ, ուստի հրամանը հաջողությամբ է կատարվում, բայց ծառայությունը դեռևս մեկնարկում է։ Ծառայությունը կանգնեցնելու համար մենք օգտագործում ենք drop-in՝ConditionPathExists=!/etc/<name>.holdպայմանով. մինչև այդ ֆայլի գոյությունը ծառայությունը չի մեկնարկի՝ ոչ բեռնման ժամանակ, ոչ էլ ձեռքով։systemctl is-activeհրամանը աշխատող oneshot ծառայությունը համարում է անակտիվ։ ԵրբType=oneshotծառայությունը աշխատում է, դրա վիճակը «activating» է, ուստիis-active-ը տպում է դա և վերադարձնում 3։while systemctl is-active --quiet job.service; do sleep 60; doneտիպի ցիկլը, որը նախատեսված է գիշերային առաջադրանքի սպասելու համար, անմիջապես ավարտվում է։ Կարդացեք վիճակը փոխարենը. active, activating, reloading կամ deactivating բոլորը նշանակում են, որ այն դեռևս աշխատում է։
Factory Floor-ը հետևում է միացված, բայց չաշխատող ծառայություններին։ Կանխադրված այն միայն հաղորդում է դրանց մասին, և միայն այն դեպքում է մեկնարկում, եթե դուք միացնեք այդ ֆունկցիան։ 1.0.3 տարբերակից սկսած՝ դրա զգուշացումը նաև ասում է, թե ինչպես դադարեցնել ծառայությունը միտումնավոր, և դրա runbook-ը նույնը նշում է։