Зашто се подсетник VPN-а од 23 сата активира за погрешну сесију
Обавештење од 23 сата треба да прати једну сесију, а не налог. Вежите тајмер за везу која је почела и третирајте спавање и поновно повезивање као одвојене случајеве.
Обавештење се појавило двадесет минута после повезивања. Бројач испод њега је радио од претходног јутра, или од последње аутентификације налога, и ништа у упозорењу није рекло које. То је симптом: подсетник везан за нешто друго, а не за везу пред вама.
Решење није боље упозорење. Решење је одлучити који сат захтев подразумева, а затим везати тајмер за објекат који постоји на том сату.
Шта се активирало и шта је бројало
Три вероватна извора дају исту поруку. Календарско правило ради у фиксном локалном времену и не зна ништа о тунелима. Бројач у клијенту се гомила док је било која веза активна и преживљава поновна повезивања. Политика пролаза истиче сесију на страни сервера и прво шаље упозорење.
Само се последња два односе на сесију, а ни она се не слажу. Бројач клијента мери шта је локални процес приметио; пролаз мери шта је аутентификовао и обрачунао. Спавање, промена мреже или поновно покретање посматрача могу их раздвојити на сате, и зато се упозорење и присилни истек разилазе.
Три сата иза једног захтева
Почните тако што ћете записати реченицу која вам је заиста потребна. Упозорити пре него пролаз прекине ову везу није исти захтев као подсетити после дана повезаног времена. Није исто ни као известити да ова сесија траје већ 23 сата. Свака верзија именује други догађај, и друга компонента мора да одговори на њега.
Затим проверите постоје ли подаци. Локална почетна временска ознака даје старост сесије без зависности од сервера. Политика пролаза даје преостали век, али само ако га пролаз излаже. Извештај о коришћењу даје трајање накнадно, а то не може да покреће унапред послато обавештење.
Вежите тајмер за сесију, не за налог
Прво изаберите објекат. Један налог може да држи више уређаја и више истовремених сесија, па подсетник везан за корисничко име не може да каже која је веза достигла старост. Вежите га за профил и то активирање, и откажите обавештење које чека када активирање истекне.
| 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 |
Та табела је уговор за ваш сопствени обавештавач, а не опис API-ја за повратни позив било ког клијента. Шта год инсталирани производ документује о стању везе, то је извор за који се треба везати; где излаже само догађаје аутентификације, реците то гласно и прихватите грубље понашање уместо да закључујете о сесији.
Тестирајте га кратким прагом
Никада не тражите грешку у целодневном тајмеру целодневним чекањем. Додајте подесив праг, поставите га на тридесет секунди и изведите четири прелаза редом: повежи, чекај, прекини, поново повежи. Сваки прелаз треба да да тачно једну промену стања, а поновно повезивање треба да закаже нови рок уместо да наследи стари.
# 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
Гледајте временске ознаке, а не формулацију. Обавештење које стигне са почетним временом претходне сесије везало је погрешан објекат, а обавештење које стигне двапут за један рок значи да ознака послато никада није била сачувана.
Спавање, поновно повезивање и пропуштена достава
Спавање разбија оба наивна решења. Монотоно одбројавање стане док машина спава, рок по зидном сату наставља да се креће, а тајмер који се активира током спавања бива достављен касно или никако. Одлучите какво понашање ваш захтев тражи, па успавајте машину преко прага и потврдите.
Достава заслужује исту пажњу. Ако се обавештење не може приказати, ставите га у ред и поново проверите постоји ли циљна сесија пре него што га коначно прикажете; иначе је корисник упозорен на везу која је већ завршила. Присилно прекидање и обнављање акредитива остају изван ове стазе, јер подсетник који тихо мења судбину везе јесте политичка одлука обучена у обавештење.