Bildirim bağlandıktan yirmi dakika sonra ortaya çıktı. Altındaki sayaç önceki sabahdan, ya da hesabın son kimlik doğrulamasından beri çalışıyordu ve uyarıda hangisi olduğu yazmıyordu. Belirti bu: önünüzdeki bağlantıya değil, başka bir şeye bağlanmış bir hatırlatıcı.

Çözüm daha iyi bir uyarı değil. Gereksinimin hangi saati kastettiğine karar vermek ve sonra zamanlayıcıyı o saatte var olan bir nesneye bağlamak.

Ne tetiklendi ve ne sayıyordu

Üç olası kaynak aynı mesajı üretir. Takvim kuralı sabit yerel saatte çalışır ve tüneller hakkında hiçbir şey bilmez. İstemcideki sayaç herhangi bir bağlantı açık olduğu sürece birikir ve yeniden bağlanmaları atlatır. Ağ geçidi ilkesi oturumu sunucu tarafında sona erdirir ve önce bir uyarı gönderir.

Yalnızca son ikisi bir oturumla ilgilidir ve onlar bile aynı fikirde değildir. İstemci sayacı yerel sürecin gözlediğini ölçer; ağ geçidi kimlik doğruladığını ve hesaba kattığını ölçer. Uyku, ağ değişikliği veya gözlemcinin yeniden başlaması ikisini saatlerce ayırabilir ve bu yüzden uyarı ile zorunlu sona erme birbirinden uzaklaşır.

Tek bir gereksinimin arkasında üç saat

Gerçekten istediğiniz cümleyi yazarak başlayın. Ağ geçidi bu bağlantıyı bitirmeden önce uyarmak, bir gün bağlı kalınan süreden sonra hatırlatmakla aynı gereksinim değildir. Bu oturumun 23 saattir açık olduğunu bildirmekle de aynı değildir. Her sürüm farklı bir olayı adlandırır ve farklı bir bileşenin buna yanıt vermesi gerekir.

Sonra verinin var olup olmadığını kontrol edin. Yerel başlangıç zaman damgası oturumun yaşını sunucuya bağlı olmadan verir. Ağ geçidi ilkesi kalan ömrü verir, ancak yalnızca ağ geçidi bunu açığa çıkarıyorsa. Kullanım raporu süreyi olaydan sonra verir ve bu, önceden bir bildirimi süremez.

Zamanlayıcıyı oturuma bağlayın, hesaba değil

Önce nesneyi seçin. Bir hesap birkaç cihaz ve birkaç eşzamanlı oturum tutabilir, bu yüzden kullanıcı adına bağlanmış bir hatırlatıcı hangi bağlantının o yaşa ulaştığını söyleyemez. Onu profile ve o etkinleştirmeye bağlayın, etkinleştirme bittiğinde bekleyen bildirimi iptal edin.

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

O tablo kendi bildirimciniz için bir sözleşmedir, herhangi bir istemcinin geri çağırma API'sinin açıklaması değildir. Kurulu ürünün bağlantı durumu hakkında belgelendirdiği her şey bağlanılacak kaynaktır; yalnızca kimlik doğrulama olaylarını açığa çıkardığı yerde bunu yüksek sesle söyleyin ve oturum çıkarsamak yerine daha kaba davranışı kabul edin.

Kısa bir eşikle deneyin

Bir günlük zamanlayıcıyı asla bir günlük beklemeyle hata ayıklamayın. Yapılandırılabilir bir eşik ekleyin, otuz saniyeye ayarlayın ve sırayla dört geçiş çalıştırın: bağlan, bekle, kes, yeniden bağlan. Her geçiş tam olarak bir durum değişikliği üretmeli ve yeniden bağlanma eski son tarihi devralmak yerine yenisini planlamalıdır.

# 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

İfadeye değil zaman damgalarına bakın. Önceki oturumun başlangıç saatiyle gelen bildirim yanlış nesneyi bağlamıştır ve bir son tarih için iki kez gelen bildirim, gönderildi işaretinin hiç kaydedilmediği anlamına gelir.

Uyku, yeniden bağlanma ve kaybedilen teslimat

Uyku her iki saf tasarımı da bozar. Monoton geri sayım makine uyurken durur, duvar saati son tarihi hareket etmeye devam eder ve uyku sırasında tetiklenen zamanlayıcı geç ya da hiç teslim edilmez. Gereksiniminizin hangi davranışı istediğine karar verin, sonra makineyi eşiğin ötesinde uyutun ve doğrulayın.

Teslimat da aynı özeni hak eder. Bildirim gösterilemiyorsa kuyruğa alın ve sonunda göstermeden önce hedef oturumun hâlâ var olduğunu yeniden kontrol edin; aksi halde kullanıcı zaten sona ermiş bir bağlantı için uyarılır. Zorla bağlantı kesme ve kimlik bilgisi yenileme bu yolun dışında kalır, çünkü bağlantının kaderini sessizce değiştiren bir hatırlatıcı, bildirim kılığına girmiş bir ilke kararıdır.

İlgili makaleler