Waarom 'n 23-uur-VPN-herinnering vir die verkeerde sessie afgaan
'n 23-uur-kennisgewing moet een sessie volg, nie die rekening nie. Bind die tydhouer aan die verbinding wat begin het en hanteer slaap en herverbinding as aparte gevalle.
Die kennisgewing het twintig minute na die verbinding verskyn. Die teller daaronder het sedert die vorige oggend geloop, of sedert die rekening laas geauthentiseer het, en niks in die waarskuwing het gesê watter een nie. Dit is die simptoom: 'n herinnering wat aan iets anders as die verbinding voor jou gekoppel is.
Die oplossing is nie 'n beter waarskuwing nie. Dit is om te besluit watter klok die vereiste bedoel, en dan die tydhouer te bind aan 'n objek wat in daardie klok bestaan.
Wat afgegaan het, en wat dit getel het
Drie moontlike bronne lewer dieselfde boodskap. 'n Kalenderreel loop op 'n vaste plaaslike tyd en weet niks van tonnels nie. 'n Teller in die kliënt hoop op terwyl enige verbinding aktief is en oorleef herverbindings. 'n Gateway-beleid laat die sessie aan die bedienerkant verval en stuur eers 'n waarskuwing.
Net die laaste twee gaan oor 'n sessie, en selfs hulle stem nie saam nie. Die kliëntteller meet wat die plaaslike proses waargeneem het; die gateway meet wat dit geauthentiseer en verreken het. 'n Slaap, 'n netwerkverandering of 'n herbegin van die waarnemer kan die twee met ure skei, en daarom dryf die waarskuwing en die afgedwonge vervaldatum uitmekaar.
Drie klokke agter een vereiste
Begin deur die sin neer te skryf wat jy eintlik wil hê. Om te waarsku voordat die gateway hierdie verbinding beëindig, is nie dieselfde vereiste as om ná 'n dag se verbindingstyd te herinner nie. Dit is ook nie dieselfde as om te rapporteer dat hierdie sessie al 23 uur op is nie. Elke weergawe noem 'n ander gebeurtenis, en 'n ander komponent moet dit beantwoord.
Kyk dan of die data bestaan. 'n Plaaslike begintydstempel gee jou die ouderdom van die sessie sonder enige afhanklikheid van die bediener. 'n Gateway-beleid gee jou die oorblywende leeftyd, maar net as die gateway dit blootstel. 'n Gebruiksverslag gee jou die duur nadat dit gebeur het, wat nie 'n vooraf kennisgewing kan dryf nie.
Bind die tydhouer aan die sessie, nie die rekening nie
Kies eers die objek. 'n Rekening kan verskeie toestelle en verskeie gelyktydige sessies hê, so 'n herinnering wat op die gebruikersnaam gesleutel is, kan nie sê watter verbinding die ouderdom bereik het nie. Sleutel dit op die profiel plus daardie aktivering, en kanselleer die hangende kennisgewing wanneer die aktivering eindig.
| 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 |
Daardie tabel is 'n kontrak vir jou eie kennisgewer, nie 'n beskrywing van enige kliënt se callback-API nie. Wat die geïnstalleerde produk ook al vir verbindingstatus dokumenteer, is die bron waaraan jy moet bind; waar dit net authentiseringsgebeurtenisse blootstel, sê dit hardop en aanvaar die growwer gedrag eerder as om 'n sessie af te lei.
Toets dit met 'n kort drumpel
Moenie 'n tydhouer van 'n dag lank ontfout met 'n wag van 'n dag lank nie. Voeg 'n verstelbare drumpel by, stel dit op dertig sekondes, en voer vier oorgange in volgorde uit: verbind, wag, ontkoppel, herverbind. Elke oorgang moet presies een toestandsverandering lewer, en die herverbinding moet 'n nuwe spertyd skeduleer eerder as om die ou een te erf.
# 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
Let op die tydstempels eerder as die bewoording. 'n Kennisgewing wat opdaag met die vorige sessie se begintyd het die verkeerde objek gebind, en 'n kennisgewing wat twee keer vir een spertyd opdaag, beteken die versendingvlag is nooit gestoor nie.
Slaap, herverbinding en gemiste aflewering
'n Slaapstand breek albei naïewe ontwerpe. 'n Monotoniese aftelling stop terwyl die masjien slaap, 'n muurklok-spertyd hou aan beweeg, en 'n tydhouer wat tydens die slaap afgaan, word laat of glad nie afgelewer nie. Besluit watter gedrag jou vereiste nodig het, en laat die masjien dan oor die drumpel slaap en bevestig dit.
Aflewering verdien dieselfde sorg. As die kennisgewing nie gewys kan word nie, stel dit in 'n tou, en kyk weer of die teikensessie nog bestaan voordat jy dit uiteindelik wys; anders word die gebruiker gewaarsku oor 'n verbinding wat al geëindig het. Gedwonge ontkoppeling en hernuwing van geloofsbriewe bly buite hierdie pad, want 'n herinnering wat die verbinding se lot stilweg verander, is 'n beleidsbesluit in 'n kennisgewing se klere.