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 readWhat it establishesWhere it misleads
Connection state changes to activeA session started nowDoes not carry the gateway's own session identifier
Duration reported at disconnectTotal service time for that sessionArrives too late for any advance notice
Interim usage updateTime accounted up to that updateStaleness equals the update interval
Local timestamp taken at activationAge of your observationResets 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.

Susiję straipsniai