Prečo sa 23-hodinové pripomenutie VPN spustí pre nesprávnu reláciu
Oznámenie po 23 hodinách má sledovať jednu reláciu, nie účet. Pripnite časovač k spojeniu, ktoré sa začalo, a spánok i opätovné pripojenie berte ako samostatné prípady.
Oznámenie sa objavilo dvadsať minút po pripojení. Počítadlo pod ním bežalo od predchádzajúceho rána, alebo od poslednej autentizácie účtu, a nič vo výstrahe nehovorilo ktoré. To je symptóm: pripomenutie pripnuté k niečomu inému než k spojeniu pred vami.
Riešením nie je lepšia výstraha. Je to rozhodnutie, ktoré hodiny požiadavka myslí, a potom pripnutie časovača k objektu, ktorý v tých hodinách existuje.
Čo sa spustilo a čo počítalo
Tri pravdepodobné zdroje dávajú rovnakú správu. Kalendárové pravidlo beží v pevnom miestnom čase a o tuneloch nevie nič. Počítadlo v klientovi sa kumuluje, kým je hore akékoľvek spojenie, a prežíva opätovné pripojenia. Politika brány ukončí reláciu na strane servera a najprv pošle varovanie.
Len posledné dve sa týkajú relácie, a ani tie sa nezhodujú. Počítadlo klienta meria, čo pozoroval miestny proces; brána meria, čo autentizovala a vyúčtovala. Spánok, zmena siete alebo reštart pozorovateľa ich môžu rozdeliť o hodiny, a preto sa výstraha a vynútené vypršanie rozchádzajú.
Tri hodiny za jednou požiadavkou
Začnite tým, že napíšete vetu, ktorú skutočne chcete. Varovať predtým, než brána ukončí toto spojenie, nie je tá istá požiadavka ako pripomenúť po dni pripojeného času. Nie je to ani to isté ako hlásiť, že táto relácia beží 23 hodín. Každá verzia pomenúva inú udalosť a iná komponenta na ňu musí odpovedať.
Potom skontrolujte, či dáta existujú. Miestna počiatočná časová pečiatka vám dá vek relácie bez závislosti od servera. Politika brány vám dá zostávajúcu životnosť, ale len ak ju brána vystavuje. Správa o používaní vám dá trvanie po fakte, a to nemôže riadiť predbežné oznámenie.
Pripnite časovač k relácii, nie k účtu
Najprv vyberte objekt. Účet môže držať niekoľko zariadení a niekoľko súbežných relácií, takže pripomenutie viazané na používateľské meno nemôže povedať, ktoré spojenie dosiahlo vek. Pripnite ho k profilu plus tej aktivácii a zrušte čakajúce oznámenie, keď aktivácia skončí.
| Evidence you can read | What it establishes | Where it misleads |
|---|---|---|
| Connection state changes to active | A session started now | Does not carry the gateway's own session identifier |
| Duration reported at disconnect | Total service time for that session | Arrives too late for any advance notice |
| Interim usage update | Time accounted up to that update | Staleness equals the update interval |
| Local timestamp taken at activation | Age of your observation | Resets whenever the observer restarts |
Tá tabuľka je zmluva pre váš vlastný oznamovač, nie opis API spätného volania akéhokoľvek klienta. Čokoľvek inštalovaný produkt dokumentuje o stave spojenia, je zdroj, ku ktorému sa treba pripútať; kde vystavuje len udalosti autentizácie, povedzte to nahlas a prijmite hrubšie správanie namiesto odvodzovania relácie.
Otestujte to krátkym prahom
Nikdy neladte celodenný časovač celodenným čakaním. Pridajte konfigurovateľný prah, nastavte ho na tridsať sekúnd a vykonajte štyri prechody v poradí: pripojiť, počkať, odpojiť, znovu pripojiť. Každý prechod by mal dať presne jednu zmenu stavu a opätovné pripojenie by malo naplánovať nový termín, nie zdediť starý.
# current connection state and profile identity
nmcli -f GENERAL.STATE,GENERAL.CONNECTION connection show work
# the notifier unit you wrote: does it restart the deadline or resume it?
journalctl --user -u vpn-timer.service --since "-5 min" -o cat
Sledujte časové pečiatky, nie formuláciu. Oznámenie, ktoré prichádza s časom začiatku predchádzajúcej relácie, pripnuté nesprávny objekt, a oznámenie, ktoré prichádza dvakrát na jeden termín, znamená, že príznak odoslania nebol nikdy uložený.
Spánok, opätovné pripojenie a zmeškané doručenie
Spánok rozbíja oba naivné návrhy. Monotónne odpočítavanie sa zastaví, kým stroj spí, termín podľa nástenných hodín sa stále posúva a časovač, ktorý sa spustí počas spánku, je doručený neskoro alebo vôbec. Rozhodnite, aké správanie požiadavka potrebuje, potom stroj uspäte cez prah a potvrďte to.
Doručenie si zaslúži rovnakú starostlivosť. Ak oznámenie nemožno zobraziť, zaraďte ho do frontu a pred konečným zobrazením znova overte, či cieľová relácia ešte existuje; inak je používateľ varovaný pred spojením, ktoré sa už skončilo. Vynútené odpojenie a obnova prihlasovacích údajov zostávajú mimo tejto cesty, pretože pripomenutie, ktoré potichu mení osud spojenia, je rozhodnutie politiky oblečené ako oznámenie.