Апавяшчэнне з'явілася праз дваццаць хвілін пасля падключэння. Лічыльнік пад ім ішоў з мінулай раніцы або з моманту апошняй аўтэнтыфікацыі ўліковага запісу, і нішто ў папярэджанні не паказвала, што менавіта. Гэта і ёсць сімптом: нагадванне, прывязанае не да таго злучэння, якое перад вамі.

Рашэнне — не лепшае папярэджанне. Гэта выбар таго, які менавіта гадзіннік мае на ўвазе патрабаванне, і затым прывязка таймера да аб'екта, які існуе ў гэтым гадзінніку.

Што спрацавала і што яно лічыла

Тры верагодныя крыніцы даюць тое ж паведамленне. Правіла календара працуе ў фіксаваны мясцовы час і нічога не ведае пра тунелі. Лічыльнік у кліенце назапашваецца, пакуль паднята хоць якое злучэнне, і перажывае перападлучэнні. Палітыка шлюза сканчае сесію на баку сервера і спачатку адпраўляе папярэджанне.

Толькі апошнія дзве датычаць сесіі, і нават яны разыходзяцца. Лічыльнік кліента вымярае тое, што назіраў мясцовы працэс; шлюз вымярае тое, што ён аўтэнтыфікаваў і ўлічыў. Сон, змена сеткі або перазапуск назіральніка могуць развесці іх на гадзіны, і менавіта таму папярэджанне і прымусовы тэрмін разыходзяцца.

Тры гадзіннікі за адным патрабаваннем

Пачніце з таго, каб запісаць сказ, які вам сапраўды патрэбны. Папярэдзіць перад тым, як шлюз скончыць гэта злучэнне, — не тое ж патрабаванне, што нагадаць пасля сутак часу злучэння. Гэта таксама не тое ж, што паведаміць, што гэта сесія ўжо 23 гадзіны. Кожны варыянт называе розную падзею, і адказваць на яе павінен розны кампанент.

Затым праверце, ці існуюць даныя. Мясцовая адзнака часу пачатку дае ўзрост сесіі без залежнасці ад сервера. Палітыка шлюза дае астатні тэрмін, але толькі калі шлюз яго паказвае. Справаздача аб выкарыстанні дае працягласць пасля факту, а гэта не можа кіраваць загадзя папярэджаннем.

Прывяжыце таймер да сесіі, а не да ўліковага запісу

Спачатку выберыце аб'ект. Уліковы запіс можа ўтрымліваць некалькі прылад і некалькі адначасовых сесій, таму нагадванне, прывязанае да імені карыстальніка, не можа сказаць, якое злучэнне дасягнула ўзросту. Прывязайце яго да профілю разам з гэтай актывацыяй і адмяніце чаканае апавяшчэнне, калі актывацыя скончыцца.

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

Гэтая табліца — кантракт для вашага ўласнага апавяшчальніка, а не апісанне 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

Сачыце за адзнакамі часу, а не за фармулёўкай. Апавяшчэнне, якое прыходзіць з часам пачатку папярэдняй сесіі, прывязала не той аб'ект, а апавяшчэнне, якое прыходзіць двойчы на адзін тэрмін, азначае, што сцяг адпраўкі ніколі не захоўваўся.

Сон, перападлучэнне і страчаная дастаўка

Сон ламае абедзве наіўныя канструкцыі. Манатонны адваротны адлік спыняецца, пакуль машына спіць, тэрмін па насценным гадзінніку працягвае рухацца, а таймер, які спрацоўвае падчас сну, дастаўляецца позна або не дастаўляецца зусім. Вырашыце, якія паводзіны патрэбны патрабаванню, затым паглыбіце машыну ў сон за парогам і пацвердзіце.

Дастаўка заслугоўвае такой жа ўвагі. Калі апавяшчэнне немагчыма паказаць, пастаўце яго ў чаргу і пераправерце, ці існуе мэтавая сесія, перш чым нарэшце паказаць яго; інакш карыстальнік папярэджаны пра злучэнне, якое ўжо скончылася. Прымусовае адключэнне і абнаўленне ўліковых даных застаюцца па-за гэтым шляхам, бо нагадванне, якое ціха змяняе лёс злучэння, — гэта рашэнне палітыкі ў адзенні апавяшчэння.

Падобныя артыкулы