Proč se 23hodinová připomínka VPN spustí pro špatnou relaci
Oznámení po 23 hodinách má sledovat jednu relaci, ne účet. Připněte časovač ke spojení, které začalo, a spánek i opětovné připojení berte jako samostatné případy.
Oznámení se objevilo dvacet minut po připojení. Počítadlo pod ním běželo od předchozího rána, nebo od poslední autentizace účtu, a nic ve výstraze neříkalo které. To je symptom: připomínka vázaná na něco jiného než na spojení před vámi.
Řešení není lepší výstraha. Je to rozhodnutí, které hodiny požadavek míní, a potom připoutání časovače k objektu, který v těch hodinách existuje.
Co se spustilo a co počítalo
Tři pravděpodobné zdroje dávají stejnou zprávu. Kalendářní pravidlo běží v pevném místním čase a o tunelech neví nic. Počítadlo v klientovi se sčítá, dokud je jakékoli spojení nahoru, a přežívá opětovná připojení. Zásada brány ukončí relaci na straně serveru a nejprve pošle varování.
Jen poslední dva se týkají relace, a ani ty se neshodují. Počítadlo klienta měří, co pozoroval místní proces; brána měří, co autentizovala a zaúčtovala. Spánek, změna sítě nebo restart pozorovatele je mohou rozdělit o hodiny, a proto se výstraha a vynucené vypršení rozcházejí.
Tři hodiny za jedním požadavkem
Začněte tím, že napíšete větu, kterou skutečně chcete. Varovat předtím, než brána toto spojení ukončí, není stejný požadavek jako připomenout po dni připojeného času. Není to ani totéž jako hlásit, že tato relace běží 23 hodiny. Každá verze pojmenovává jinou událost a jiná komponenta na ni musí odpovědět.
Pak zkontrolujte, zda data existují. Místní počáteční časové razítko vám dá stáří relace bez závislosti na serveru. Zásada brány vám dá zbývající životnost, ale jen pokud ji brána vystavuje. Zpráva o využití vám dá dobu po faktu, a to nemůže řídit předběžné oznámení.
Připoutejte časovač k relaci, ne k účtu
Nejprve vyberte objekt. Účet může držet několik zařízení a několik souběžných relací, takže připomínka vázaná na uživatelské jméno nemůže říct, které spojení dosáhlo stáří. Připněte ji k profilu plus té aktivaci a zrušte čekající oznámení, když aktivace 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 |
Ta tabulka je smlouva pro váš vlastní oznamovatel, ne popis zpětného volání API jakéhokoli klienta. Co instalovaný produkt dokumentuje o stavu spojení, to je zdroj, ke kterému se máte připoutat; kde vystavuje jen události autentizace, řekněte to nahlas a přijměte hrubší chování místo odvozování relace.
Otestujte to krátkým prahem
Nikdy neladěte celodenní časovač celodenním čekáním. Přidejte konfigurovatelný práh, nastavte jej na třicet sekund a proveďte čtyři přechody v pořadí: připojit, počkat, odpojit, znovu připojit. Každý přechod má dát přesně jednu změnu stavu a opětovné připojení má naplánovat nový termín, ne zdědit 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á razítka, ne formulaci. Oznámení, které dorazí s počátečním časem předchozí relace, připoutalo špatný objekt, a oznámení, které dorazí dvakrát na jeden termín, znamená, že příznak odeslání nebyl nikdy uložen.
Spánek, opětovné připojení a zmeškané doručení
Spánek rozbíjí oba naivní návrhy. Monotónní odpočet se zastaví, dokud stroj spí, termín podle nástěnných hodin se dál posouvá a časovač, který se spustí během spánku, je doručen pozdě nebo vůbec. Rozhodněte, které chování požadavek potřebuje, pak stroj uspěte přes práh a potvrďte to.
Doručení si zaslouží stejnou péči. Pokud oznámení nelze zobrazit, zařaďte je do fronty a před konečným zobrazením znovu ověřte, že cílová relace stále existuje; jinak je uživatel varován před spojením, které už skončilo. Vynucené odpojení a obnova pověření zůstávají mimo tuto cestu, protože připomínka, která tiše mění osud spojení, je rozhodnutí zásady oblečené jako oznámení.