Boot mesin, masuk, dan ketahui bahwa terowongan naik lalu mati beberapa detik kemudian. Profilnya baik-baik saja, sertifikatnya baik-baik saja, dan satu-satunya jejak yang tersisa adalah jurnal dari boot itu. Yang biasanya terjadi adalah balapan: unit mulai sebelum mesin punya alamat, dan urutan yang dideklarasikannya tidak berarti seperti yang terlihat. Semua di bawah ini tentang membuktikan balapan itu dari bukti dan menutupnya dengan benar.

Sasaran adalah titik temu, bukan pengelola

network-online.target tidak tahu apa itu jaringan. Ini adalah titik koordinasi yang mengumpulkan layanan yang seharusnya menunda penyalaan sampai tautan bisa dipakai, dan mendelegasikan definisinya ke pengelola jaringan mana pun yang memiliki mesin itu. Di sebagian besar desktop dan server itu berarti layanan tunggu yang disediakan NetworkManager atau systemd-networkd. Jika tidak ada yang diaktifkan, sasaran tidak punya apa pun untuk ditunggu, jadi sasaran selesai pada saat sesuatu menariknya masuk, yang bisa jauh sebelum DHCP menjawab. Baris urutan di unit Anda jujur dan tetap tidak berguna.

Jadi pertanyaan pertama bukanlah apa yang dideklarasikan unit Anda. Melainkan apakah ada sesuatu di mesin ini yang benar-benar melakukan penantian.

Baca boot terakhir alih-alih berkas unit

Berkas unit menjelaskan niat, dan jurnal menjelaskan apa yang terjadi. Minta hanya boot itu, dengan stempel waktu monotonik agar setiap pesan duduk di satu jam. Lalu temukan dua baris: saat unit terowongan mulai dinyalakan, dan saat alamat muncul atau layanan tunggu selesai. Urutkan kedua angka itu dan balapan entah terbukti atau tersingkir.

Tampilan dependensi menegaskannya. Jika rantai kritis untuk unit terowongan tidak berisi layanan tunggu, tidak ada yang menunda penyalaan di jalur itu, dan sasaran tidak melakukan pekerjaan yang Anda anggap. Dua tampilan, satu kesimpulan.

systemctl list-units --type=service --state=running | grep wait-online
journalctl -b -o short-monotonic -u openvpn-client@office

Tambahkan penantian, lalu percobaan ulang

Gunakan drop-in alih-alih menyunting unit yang dipaketkan, agar pembaruan paket tidak diam-diam membuang perubahan itu. Dua direktif penting: unit harus diurutkan setelah sasaran, dan harus menarik sasaran ke transaksi yang sama. Urutan saja tidak memanggil sasaran; keinginan yang melakukannya.

Unit klien OpenVPN yang dipaketkan sudah membawa keduanya. Unit yang ditulis tangan biasanya membawa satu atau tidak sama sekali, yang layak diperiksa sebelum Anda menambahkan apa pun.

[Service]
Restart=on-failure
RestartSec=15

Mengapa tidur tetap adalah jebakan

Tidur di ExecStartPre terasa seperti perbaikan urutan dan berperilaku seperti penundaan dengan langkah tambahan. Ini memperlambat setiap boot, termasuk yang sehat, dan tetap kalah ketika tautan memakan waktu lebih lama daripada angka yang Anda pilih.

Lebih buruk lagi, ini menyembunyikan apakah layanan tunggu bekerja, sehingga kegagalan berikutnya muncul sebagai masalah yang benar-benar baru alih-alih yang sama dengan waktu berbeda. Penundaan mulai ulang yang singkat adalah instrumen yang lebih baik: tidak ada biayanya pada boot yang sehat dan mengubah balapan yang kalah menjadi percobaan lain. Jaga intervalnya sederhana dan biarkan unit berhasil. Jika ia mulai ulang selamanya, profilnya rusak dan berapa pun percobaan ulang tidak akan mengubahnya, jadi bacalah log alih-alih menaikkan interval.

Ketika urutan benar dan nama tetap gagal

Unit aktif dengan rute terowongan berarti urutan sudah melakukan tugasnya dan sisa kesalahan berada satu lapis di atasnya. Bentuk biasanya adalah pengaturan resolver yang diterapkan skrip up terowongan sebelum tautan atau resolver siap menyimpannya. Bandingkan keadaan resolver selama kegagalan dengan keadaan setelah unit terowongan dimulai ulang.

Jika mulai ulang memperbaiki pencarian, Anda punya cacat urutan penyalaan dan bukan server DNS yang salah, dan keduanya butuh perbaikan berbeda. Lalu buktikan semuanya dengan boot dingin alih-alih mulai ulang layanan, karena mulai ulang berjalan terhadap jaringan yang sudah menyala dan akan menyembunyikan persis cacat yang Anda kejar. Ulangi dengan tautan sengaja diperlambat, dan anggap unit yang hanya bekerja saat jaringan cepat sebagai masih rusak.

Artikel terkait