Vypínání služeb VPN a proxy v Linuxu ve správném pořadí
Zastavte konzumenta, dokud cesta existuje, pak proxy, pak tunel přes jeho vlastníka. ExecStop a TimeoutStopSec používejte vědomě, ne plošným zabíjením.
Zaseknutí při vypínání, když běží proxy, je jen zřídka chyba VPN, i když je VPN poslední věc viditelná na obrazovce. Aplikace za proxy stále čekají na cestu, která právě zmizí, a jednotka, která tunel vlastní, ještě nebyla požádána, aby ho zavřela. To, co vypadá jako pomalá služba, je obvykle problém pořadí. Pořadí vyřeší víc těchto případů než jakákoli změna časového limitu.
Pracujte směrem ven v opačném pořadí: nejprve konzumenti, pak proxy, pak tunel, každý zastavený komponentou, která ho spustila.
Než cokoli zastavíte, vypište jednotky
Zapište jednotku aplikace, jednotku proxy a vlastníka VPN zapojené do běžného běhu. Přidejte každý resolver nebo pomocník s vlastním rozkladem, protože právě na ty lidé ve dvě ráno zapomínají. Bez toho seznamu první příkaz k zastavení, který napíšete, vybere oběť náhodně.
Jména jsou slabý důkaz. Uživatelská proxy, systémová proxy a tunel jiného účtu mohou sdílet jméno a mít zcela nesouvisející životní cykly.
Dokončete práci a pak zastavte konzumenta
Plánované zastavení začíná aplikací: nechte ji dokončit nebo zrušit její požadavky, pak zastavte proxy přes její servisní jednotku. Pokud má aplikace běžet dál poté, co tunel zmizí, zařiďte to vědomě, místo abyste ji nechali připevněnou k trase, která právě zmizí.
Požadavky, které byly během zastavení na cestě, patří do záznamu, protože odtud pochází bouře opakovaných pokusů při příštím startu.
ExecStop a ExecStopPost jsou různé nástroje
ExecStop= je synchronní operace zastavení; ExecStopPost= je úklid, který běží i po neúspěšném startu. Příkaz k zastavení, který jen pošle procesu signál a vrátí se, nechá systemd pokračovat, zatímco konzument ještě vyprazdňuje. Vše, co se musí stát v každém případě, patří do následné varianty, a vše, co musí zastavení zablokovat, do synchronní. Prohlédněte si efektivní jednotku a její doplňky, místo abyste upravovali soubor z balíčku na místě.
Graf závislostí řadí úlohy zastavení. Nepřevádí asynchronní skript na synchronní ani nenutí vzdálenou aplikaci potvrdit její data.
Ohraňte zastavení a vězte, co ta hranice stojí
TimeoutStopSec= omezuje jak příkaz k zastavení, tak vlastní ukončení služby, a systemd při vypršení limitu přejde na násilné zabití. Hodnotu vybírejte podle skutečného chování aplikace při vyprazdňování a zapište, co se může ztratit, když se aktivuje. Číslo zvolené proto, že se stroj má vypnout rychleji, je nastavení ztráty dat v převleku.
Když je zastavení stále pomalé, zachyťte jednotku, její podřízené procesy, interval v žurnálu a výsledek časového limitu. Zkracování každého limitu nebo sáhnutí po plošném zabití je způsob, jak se čistá zastavení při příštím startu změní v poškozený stav.
Odpojte se přes vlastníka a pak otestujte tři případy
Když jsou konzumenti dole, požádejte správce, který tunel vlastní, o odpojení: instanci systemd, aktivní připojení NetworkManager nebo službu dodavatele. Zabití nesouvisejícího procesu OpenVPN nutně neodstraní relaci, která dodala trasu, a proxy s politikou restartu může znovu vytvořit požadavek, zatímco cestu rozebíráte. Než začnete, sladte tuto politiku s plánovaným zastavením.
Otestujte běžné zastavení, zastavení s aktivním požadavkem a zastavení, při kterém tunel selže jako první. Opakovatelná posloupnost s termínem je lepší než rychlé vypnutí, které funguje jednou.