Paziņojums parādījās divdesmit minūtes pēc savienojuma. Skaitītājs zem tā darbojās kopš iepriekšējā rīta vai kopš pēdējās konta autentifikācijas, un nekas brīdinājumā nenorādīja, kurš. Tas ir simptoms: atgādinājums, kas piesaistīts kaut kam citam, nevis savienojumam jūsu priekšā.

Risinājums nav labāks brīdinājums. Tas ir lēmums, kuru pulksteni prasība domā, un pēc tam taimera piesaiste objektam, kas pastāv šajā pulkstenī.

Kas nostrādāja un ko tas skaitīja

Trīs iespējami avoti rada vienu un to pašu ziņojumu. Kalendāra noteikums darbojas fiksētā vietējā laikā un neko nezina par tuneļiem. Klienta skaitītājs uzkrājas, kamēr jebkurš savienojums ir aktīvs, un pārdzīvo atkārtotus savienojumus. Vārtejas politika izbeidz sesiju servera pusē un vispirms nosūta brīdinājumu.

Tikai pēdējie divi attiecas uz sesiju, un arī tie nepiekrīt. Klienta skaitītājs mēra to, ko novēroja vietējais process; vārteja mēra to, ko tā autentificēja un uzskaitīja. Miegs, tīkla maiņa vai novērotāja restartēšana var tos šķirt stundām, un tāpēc brīdinājums un piespiedu izbeigšanās attālinās viens no otra.

Trīs pulksteņi aiz vienas prasības

Sāciet ar teikuma pierakstīšanu, ko jūs patiešām vēlaties. Brīdināt pirms vārteja izbeidz šo savienojumu nav tā pati prasība kā atgādināt pēc dienas savienota laika. Tas nav arī tas pats, kas ziņot, ka šī sesija darbojas jau 23 stundas. Katra versija nosauc citu notikumu, un citai komponentei uz to jāatbild.

Pēc tam pārbaudiet, vai dati pastāv. Vietējais sākuma laikspiedols dod sesijas vecumu bez atkarības no servera. Vārtejas politika dod atlikušo mūžu, bet tikai tad, ja vārteja to atklāj. Lietošanas atskaite dod ilgumu pēc fakta, un tas nevar vadīt iepriekšēju paziņojumu.

Piesaistiet taimeri sesijai, nevis kontam

Vispirms izvēlieties objektu. Konts var turēt vairākas ierīces un vairākas vienlaicīgas sesijas, tāpēc atgādinājums, kas piesaistīts lietotājvārdam, nevar pateikt, kurš savienojums sasniedza vecumu. Piesaistiet to profilam un šai aktivizācijai, un atceliet gaidošo paziņojumu, kad aktivizācija beidzas.

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

Šī tabula ir līgums jūsu pašu paziņotājam, nevis kāda klienta atzvanīšanas API apraksts. Viss, ko instalētais produkts dokumentē par savienojuma stāvokli, ir avots, pie kura jāpiesaistās; kur tas atklāj tikai autentifikācijas notikumus, sakiet to skaļi un pieņemiet rupjāku uzvedību, nevis seciniet sesiju.

Pārbaudiet to ar īsu slieksni

Nekad neatkļūdo diennakts taimeri ar diennakts gaidīšanu. Pievienojiet konfigurējamu slieksni, iestatiet to uz trīsdesmit sekundēm un pēc kārtas izpildiet četras pārejas: savienot, gaidīt, atvienot, savienot no jauna. Katrai pārejai jādod tieši viena stāvokļa izmaiņa, un atkārtotajam savienojumam jāieplāno jauns termiņš, nevis jāmanto vecais.

# 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

Skatieties laikspiedolus, nevis formulējumu. Paziņojums, kas nāk ar iepriekšējās sesijas sākuma laiku, ir piesaistījis nepareizo objektu, un paziņojums, kas nāk divreiz vienam termiņam, nozīmē, ka nosūtīšanas karodziņš nekad netika saglabāts.

Miegs, atkārtots savienojums un zaudēta piegāde

Miegs salauž abus naivos dizainus. Monotonā atpakaļskaitīšana apstājas, kamēr mašīna guļ, termiņš pēc sienas pulksteņa turpina kustēties, un taimeris, kas iedarbojas miega laikā, tiek piegādāts vēlu vai nemaz. Izlemiet, kāda uzvedība nepieciešama jūsu prasībai, pēc tam iemidiniet mašīnu pāri slieksnim un apstipriniet.

Piegāde ir pelnījusi tādu pašu rūpību. Ja paziņojumu nevar parādīt, ievietojiet to rindā un pirms galīgās parādīšanas vēlreiz pārbaudiet, vai mērķa sesija joprojām pastāv; citādi lietotājs tiek brīdināts par jau beigušos savienojumu. Piespiedu atvienošana un akreditācijas datu atjaunošana paliek ārpus šī ceļa, jo atgādinājums, kas klusi maina savienojuma likteni, ir politikas lēmums paziņojuma drēbēs.

Saistītie raksti