Kodėl 23 valandų VPN priminimas suveikia netinkamai sesijai
23 valandų pranešimas turėtų sekti vieną sesiją, o ne paskyrą. Pririškite laikmatį prie ryšio, kuris prasidėjo, o miegą ir prisijungimą iš naujo traktuokite kaip atskirus atvejus.
Pranešimas pasirodė po dvidešimties minučių nuo prisijungimo. Skaitiklis po juo veikė nuo praėjusio ryto arba nuo paskutinio paskyros autentifikavimo, ir niekas įspėjime nenurodė, kuris. Tai ir yra simptomas: priminimas, susietas su kuo nors kitu, o ne su ryšiu priešais jus.
Sprendimas nėra geresnis įspėjimas. Tai sprendimas, kurį laikrodį turi omenyje reikalavimas, ir tada laikmačio pririšimas prie objekto, kuris egzistuoja tame laikrodyje.
Kas suveikė ir ką jis skaičiavo
Trys tikėtini šaltiniai duoda tą patį pranešimą. Kalendoriaus taisyklė veikia fiksuotu vietos laiku ir nieko nežino apie tunelius. Kliento skaitiklis kaupiasi, kol bet koks ryšys yra aktyvus, ir išgyvena prisijungimus iš naujo. Tinklo vartų politika nutraukia sesiją serverio pusėje ir pirmiausia siunčia įspėjimą.
Tik paskutiniai du yra apie sesiją, ir net jie nesutaria. Kliento skaitiklis matuoja, ką stebėjo vietinis procesas; vartai matuoja, ką autentifikavo ir apskaitė. Miegas, tinklo pasikeitimas ar stebėtojo paleidimas iš naujo gali juos atskirti valandomis, ir todėl įspėjimas bei priverstinis pasibaigimas nutolsta vienas nuo kito.
Trys laikrodžiai už vieno reikalavimo
Pradėkite užrašydami sakinį, kurio tikrai norite. Įspėti prieš vartams užbaigiant šį ryšį nėra tas pats reikalavimas kaip priminti po paros prijungto laiko. Tai nėra ir tas pats, kas pranešti, jog ši sesija veikia jau 23 valandas. Kiekviena versija įvardija skirtingą įvykį, ir skirtingas komponentas turi į jį atsakyti.
Tada patikrinkite, ar duomenys egzistuoja. Vietinė pradžios laiko žyma duoda sesijos amžių nepriklausomai nuo serverio. Vartų politika duoda likusį gyvavimo laiką, bet tik jei vartai jį atskleidžia. Naudojimo ataskaita duoda trukmę po fakto, ir tai negali valdyti išankstinio pranešimo.
Pririškite laikmatį prie sesijos, o ne paskyros
Pirmiausia pasirinkite objektą. Paskyra gali turėti kelis įrenginius ir kelias vienalaikes sesijas, todėl priminimas, susietas su naudotojo vardu, negali pasakyti, kuris ryšys pasiekė amžių. Pririškite jį prie profilio ir to aktyvavimo, o aktyvavimui pasibaigus atšaukite laukiantį pranešimą.
| 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 |
Ta lentelė yra sutartis jūsų pačių pranešėjui, o ne kokio nors kliento atgalinio iškvietimo API aprašymas. Ką įdiegtas produktas dokumentuoja apie ryšio būseną, tai yra šaltinis, prie kurio reikia rištis; kur jis atskleidžia tik autentifikavimo įvykius, pasakykite tai garsiai ir priimkite grubesnį elgesį, užuot darę prielaidą apie sesiją.
Išbandykite trumpu slenksčiu
Niekada nederinkite paros laikmačio paros laukimu. Pridėkite konfigūruojamą slenkstį, nustatykite jį trisdešimčiai sekundžių ir iš eilės atlikite keturis perėjimus: prisijungti, palaukti, atsijungti, prisijungti iš naujo. Kiekvienas perėjimas turėtų duoti lygiai vieną būsenos pasikeitimą, o prisijungimas iš naujo turėtų numatyti naują terminą, o ne paveldėti seną.
# 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
Žiūrėkite į laiko žymas, o ne į formuluotę. Pranešimas, atvykstantis su ankstesnės sesijos pradžios laiku, pririšo netinkamą objektą, o pranešimas, atvykstantis du kartus vienam terminui, reiškia, kad išsiuntimo vėliavėlė niekada nebuvo išsaugota.
Miegas, prisijungimas iš naujo ir prarastas pristatymas
Miegas sugriauna abu naivius sprendimus. Monotoninis atgalinis skaičiavimas sustoja, kol mašina miega, terminas pagal sieninį laikrodį juda toliau, o miego metu suveikęs laikmatis pristatomas vėlai arba visai nepristatomas. Nuspręskite, kokio elgesio reikia jūsų reikalavimui, tada užmigdinkite mašiną per slenkstį ir patvirtinkite.
Pristatymas nusipelno tokio pat rūpesčio. Jei pranešimo negalima parodyti, įdėkite jį į eilę ir prieš galutinai parodydami dar kartą patikrinkite, ar tikslinė sesija dar egzistuoja; kitaip naudotojas įspėjamas apie jau pasibaigusį ryšį. Priverstinis atjungimas ir prisijungimo duomenų atnaujinimas lieka už šio kelio, nes priminimas, kuris tyliai keičia ryšio likimą, yra politikos sprendimas, apsivilkęs pranešimu.