Adakah skrip up OpenVPN berjalan terlalu awal, atau ia tidak pernah bersedia?
Hook up berjalan apabila peranti terowong muncul, sebelum laluan dan kesediaan aplikasi. Padankan skrip dengan peristiwa yang diperlukannya dan bukan menambah tidur.
Skrip up berjalan, keluar dengan sifar, dan tugas di dalamnya gagal mencapai perkhidmatan persendirian yang berfungsi sempurna dua saat kemudian dari terminal. Naluri berkata ia soal masa, dan pembaikan biasa ialah tidur, yang menyembunyikan perlumbaan tanpa memahaminya. Bacaan yang lebih berguna ialah “up” menamakan hook, bukan jaminan kesediaan. Ia menyala apabila peranti terowong dikonfigurasikan, iaitu lebih awal daripada laluan, DNS, dan pasti lebih awal daripada mana-mana aplikasi di belakang terowong.
Ujian shell berjaya kerana ia dijalankan selepas semuanya tenang. Hook berjalan pada satu saat tertentu.
Di mana up terletak dalam urutan permulaan
OpenVPN mengkonfigurasikan peranti terowong dan kemudian menjalankan hook up. Pemasangan laluan ialah peringkat kemudian, dan ia mempunyai hook sendiri, itulah sebabnya tugas bergantung pada laluan yang diletakkan dalam up boleh melihat peranti tanpa laluan berguna. Letakkan kerja laluan dalam route-up dan masalah masa biasanya hilang.
Manual mendokumenkan urutan ini dan persekitaran yang diterima setiap hook. Urutan itu ialah keseluruhan penjelasan bagi laporan klasik “berfungsi dari shell saya”, dan ia juga sebab skrip yang sama boleh lulus pada satu mesin dan gagal pada mesin lain dengan peringkat laluan yang lebih perlahan. Kedua-dua hasil tidak mengatakan apa-apa tentang kualiti skrip.
DNS dan kesediaan aplikasi datang lebih lewat lagi. Malah laluan yang dipasang bukan bukti bahawa titik akhir jauh sedang mendengar, bahawa nama diselesaikan, atau bahawa sesi desktop wujud untuk tugas berlingkup pengguna.
Apa yang sebenarnya diwarisi oleh hook
Hook berjalan di bawah akaun dan persekitaran proses OpenVPN, yang tidak sama dengan shell interaktif anda. Ia mungkin kekurangan bas sesi pengguna, persekitaran desktop, atau kelayakan yang dibuka hanya semasa log masuk. Tuliskan yang mana antara itu benar-benar diperlukan oleh tugas.
Itu penting untuk tugas yang kelihatan seperti rangkaian tetapi bergantung pada konteks pengguna: memasang perkongsian dengan kelayakan pengguna, menetapkan proksi setiap pengguna, atau mengkonfigurasikan pencetak. Hook terowong istimewa ialah tempat yang salah untuk mereka, dan tidak berapa lama menunggu pun tidak membaiki sesi yang hilang.
Apabila tugas gagal dalam hook, catat akaun, persekitaran, dan operasi pertama yang gagal. Itu memisahkan masa terlalu awal daripada masalah kebenaran atau konteks, dan kedua-duanya mempunyai pembaikan yang sama sekali berbeza. Meneka antara keduanya ialah cara pembaikan lima minit menjadi satu petang.
Mengapa menambah tidur bukan pemeriksaan kesediaan
Tidur melewatkan skrip dan mengalihkan tetingkap perlumbaan. Pada hari cepat tugas berjaya; pada hari perlahan ia gagal lagi, dan kegagalan menjadi lebih sukar untuk dihasilkan semula kerana kelewatan itu kelihatan berkesan. Kelewatan yang hanya berkesan di bawah beban ringan ialah kebetulan, bukan pembaikan.
Jika kebergantungan ialah laluan, gunakan hook yang sepadan dengan pemasangan laluan. Jika kebergantungan ialah perkhidmatan di belakang terowong, gunakan pemeriksaan terbatas yang menunggu syarat khusus itu dan gagal dengan jelas apabila ia tidak pernah tiba.
Kekalkan kegagalan itu secara eksplisit. Hook yang keluar dengan sifar sedangkan kerja sebenarnya gagal adalah lebih buruk daripada hook yang gagal, kerana pengurus perkhidmatan merekodkan kejayaan dan tiada siapa melihat lagi. Satu baris log daripada skrip itu sendiri ialah cara paling murah untuk mengekalkannya jujur.
Pembersihan dan penyambungan semula wajar mendapat penjagaan yang sama
Skrip yang mengubah keadaan dikongsi memerlukan laluan pembatalan yang sepadan. Laluan, entri penyelesai, dan tanda tembok api yang ditambah oleh hook sepatutnya bersifat idempoten dan boleh diterbalikkan, jika tidak penyambungan semula akan menindih salinan kedua di atas yang pertama.
Penyambungan semula juga boleh menjalankan hook lebih kerap daripada permulaan perkhidmatan penuh. Antara muka berterusan yang menubuhkan semula sesi mungkin mencetuskan semula kitaran up dan route-up, jadi skrip yang menganggap satu pelaksanaan setiap but akan akhirnya berkelakuan salah. Kira pelaksanaan dalam log sepanjang sehari kelipan untuk melihat berapa kerap ia benar-benar berjalan. Kemudian jadikan skrip selamat untuk berjalan sebanyak itu.
Uji kitaran hayat yang gagal, bukan arahan kemudian. Hasilkan semula but atau penyambungan semula, perhatikan hook berjalan, dan sahkan tugas berjaya pada saat ia benar-benar berjalan. Kejayaan daripada shell interaktif selepas itu ialah bukti tentang kebergantungan, bukan bukti bahawa laluan permulaan berfungsi.
Namakan peristiwa yang setiap tugas bergantung padanya, kemudian lampirkan tugas itu pada peristiwa tersebut. Segala-galanya ialah kelewatan yang berlagak sebagai pemeriksaan.