Notis muncul dua puluh minit selepas menyambung. Pembilang di bawahnya telah berjalan sejak pagi sebelumnya, atau sejak akaun kali terakhir mengesahkan identiti, dan tiada apa dalam amaran yang menyatakan yang mana. Itulah gejalanya: peringatan yang terikat pada sesuatu selain sambungan di hadapan anda.

Pembaikannya bukan amaran yang lebih baik. Ia adalah memutuskan jam mana yang dimaksudkan oleh keperluan, kemudian mengikat pemasa pada objek yang wujud dalam jam itu.

Apa yang berbunyi, dan apa yang dikiranya

Tiga sumber yang mungkin menghasilkan mesej yang sama. Peraturan kalendar berjalan pada waktu tempatan tetap dan tidak tahu apa-apa tentang terowong. Pembilang dalam klien terkumpul selagi mana-mana sambungan hidup dan bertahan melalui sambung semula. Dasar gateway menamatkan sesi di sebelah pelayan dan menghantar amaran dahulu.

Hanya dua yang terakhir berkaitan sesi, dan kedua-duanya pun tidak bersetuju. Pembilang klien mengukur apa yang diperhatikan oleh proses tempatan; gateway mengukur apa yang dia sahkan dan kira. Tidur, perubahan rangkaian atau permulaan semula pemerhati boleh memisahkan kedua-duanya sehingga berjam-jam, dan itulah sebabnya amaran dan tamat tempoh yang dipaksa saling menjauh.

Tiga jam di sebalik satu keperluan

Mulakan dengan menulis ayat yang anda benar-benar mahu. Memberi amaran sebelum gateway menamatkan sambungan ini bukan keperluan yang sama dengan mengingatkan selepas sehari masa bersambung. Ia juga bukan perkara yang sama dengan melaporkan bahawa sesi ini telah hidup selama 23 jam. Setiap versi menamakan peristiwa yang berbeza, dan komponen yang berbeza mesti menjawabnya.

Kemudian semak sama ada datanya wujud. Cap masa mula tempatan memberi anda umur sesi tanpa pergantungan pada pelayan. Dasar gateway memberi anda baki hayat, tetapi hanya jika gateway mendedahkannya. Laporan penggunaan memberi anda tempoh selepas kejadian, dan itu tidak boleh memacu pemberitahuan awal.

Ikat pemasa pada sesi, bukan pada akaun

Pilih objek dahulu. Akaun boleh memegang beberapa peranti dan beberapa sesi serentak, jadi peringatan yang dikunci pada nama pengguna tidak boleh mengatakan sambungan mana yang mencapai umur itu. Kuncikan pada profil serta pengaktifan itu, dan batalkan notis yang menunggu apabila pengaktifan tamat.

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

Jadual itu ialah kontrak untuk pemberitahu anda sendiri, bukan penerangan API panggilan balik mana-mana klien. Apa sahaja yang didokumenkan oleh produk yang dipasang tentang keadaan sambungan ialah sumber yang perlu diikat; di mana ia hanya mendedahkan peristiwa pengesahan, katakan demikian dengan lantang dan terima tingkah laku yang lebih kasar daripada membuat kesimpulan tentang sesi.

Ujinya dengan ambang yang pendek

Jangan sekali-kali nyahpepijat pemasa sehari dengan penantian sehari. Tambah ambang yang boleh dikonfigurasikan, tetapkan pada tiga puluh saat, dan jalankan empat peralihan mengikut urutan: sambung, tunggu, putus, sambung semula. Setiap peralihan harus menghasilkan tepat satu perubahan keadaan, dan sambung semula harus menjadualkan tarikh akhir baharu dan bukannya mewarisi yang lama.

# 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

Lihat cap masa, bukan perkataan. Notis yang tiba dengan waktu mula sesi sebelumnya telah mengikat objek yang salah, dan notis yang tiba dua kali untuk satu tarikh akhir bermakna bendera dihantar tidak pernah disimpan.

Tidur, sambung semula dan penghantaran yang terlepas

Tidur memecahkan kedua-dua reka bentuk naif. Kira detik menurun monotonik berhenti semasa mesin tidur, tarikh akhir mengikut jam dinding terus bergerak, dan pemasa yang tercetus semasa tidur dihantar lewat atau tidak sama sekali. Tentukan tingkah laku mana yang diperlukan oleh keperluan anda, kemudian tidurkan mesin melepasi ambang dan sahkan.

Penghantaran juga memerlukan penjagaan yang sama. Jika notis tidak dapat dipaparkan, letakkan dalam baris gilir, dan semak semula bahawa sesi sasaran masih wujud sebelum akhirnya memaparkannya; jika tidak, pengguna diberi amaran tentang sambungan yang sudah tamat. Pemutusan paksa dan pembaharuan kelayakan kekal di luar laluan ini, kerana peringatan yang mengubah nasib sambungan secara senyap ialah keputusan dasar yang memakai pakaian pemberitahuan.

Artikel berkaitan