Известието се появи двадесет минути след свързването. Броячът под него работеше от предната сутрин или от последното удостоверяване на акаунта и нищо в предупреждението не казваше кое от двете. Това е симптомът: напомняне, вързано за нещо друго, а не за връзката пред вас.

Решението не е по-добро предупреждение. То е да решите кой часовник има предвид изискването и след това да вържете таймера към обект, който съществува в този часовник.

Какво се задейства и какво броеше

Три вероятни източника дават едно и също съобщение. Правило в календара работи във фиксирано местно време и не знае нищо за тунели. Брояч в клиента се натрупва, докато има връзка, и преживява повторни свързвания. Политика на шлюза изтича сесията от страната на сървъра и първо изпраща предупреждение.

Само последните две се отнасят за сесия и дори те не са съгласни. Броячът на клиента измерва какво е наблюдавал местният процес; шлюзът измерва какво е удостоверил и отчел. Заспиване, смяна на мрежата или рестартиране на наблюдателя могат да ги разделят с часове и затова предупреждението и принудителното изтичане се разминават.

Три часовника зад едно изискване

Започнете, като запишете изречението, което наистина искате. Предупреждение, преди шлюзът да прекрати тази връзка, не е същото изискване като напомняне след денонощие свързано време. Не е същото и като отчитане, че тази сесия е активна от 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

Гледайте печатите на времето, а не формулировката. Известие, което пристига с началния час на предишната сесия, е вързало грешния обект, а известие, което пристига два пъти за един краен срок, означава, че флагът за изпращане никога не е бил запазен.

Заспиване, повторно свързване и пропусната доставка

Заспиването чупи и двата наивни дизайна. Монотонното обратно броене спира, докато машината спи, крайният срок по стенния часовник продължава да се движи, а таймер, който се задейства по време на заспиване, се доставя късно или изобщо не се доставя. Решете какво поведение изисква вашето изискване, след което заспите машината през прага и го потвърдете.

Доставката заслужава същото внимание. Ако известието не може да се покаже, поставете го в опашка и проверете отново дали целевата сесия още съществува, преди най-накрая да го покажете; иначе потребителят е предупреден за връзка, която вече е приключила. Принудителното прекъсване и подновяването на идентификационните данни остават извън този път, защото напомняне, което тихо променя съдбата на връзката, е политическо решение, облечено като известие.

Подобни статии