Anda menjalankan OpenVPN dari shell dengan berkas konfigurasi, dan terminal diam tanpa keluaran apa pun. Tidak ada banner, tidak ada galat, tidak ada prompt. Naluri berkata peluncuran gagal, jadi Anda menjalankan salinan lain, lalu satu lagi, dan mesin berakhir dengan beberapa instans setengah terkonfigurasi. Sebelum semua itu, periksa profil untuk direktif yang sudah mengalihkan log ke tempat lain. Diam adalah sifat konsol, bukan sifat proses.

Diam punya dua penjelasan yang sangat berbeda

Yang pertama adalah proses berjalan baik dan menulis ke berkas yang tidak Anda pantau. Yang kedua adalah proses langsung keluar dengan galat yang tercatat di berkas yang sama.

Keduanya meninggalkan terminal kosong, dan satu pertanyaan memisahkannya: apakah ada proses sekarang, dan apa isi berkas yang diperintahkan untuk ditulisi. Jawab itu sebelum menyentuh konfigurasi lagi. Menjalankan ulang demi mendapatkan keluaran adalah cara dua instans akhirnya berebut satu perangkat terowongan dan port yang sama, yang menghasilkan galat tanpa hubungan dengan masalah semula.

Temukan direktifnya, lalu temukan prosesnya.

ps -o pid,args= -C openvpn
grep -nE '^\s*(log|log-append|cd|daemon|verb)\b' /etc/openvpn/server/server.conf

Temukan tujuan yang dipakai proses yang sedang berjalan

Baca profil yang benar-benar dipakai untuk menjalankan proses, bukan yang Anda sunting. Instans yang dikelola layanan biasanya memuat jalur berbeda dan berjalan dengan direktori kerja berbeda, sehingga nama berkas relatif terselesaikan di tempat yang tidak Anda duga.

Direktif cd yang eksplisit membuat perbedaan itu lebih tajam, karena jalur relatif ikut berpindah bersama perubahan direktori. Jika Anda mewarisi konfigurasi ini, berkasnya bisa berada di tempat yang sekarang tidak akan dicari siapa pun.

Bandingkan waktu modifikasi berkas dengan saat Anda menjalankannya. Log minggu lalu adalah bukti tentang minggu lalu. Lalu baca baris terakhir berkas yang berubah, dan perlakukan apa pun di sana sebagai pesan mulai yang selama ini Anda lewatkan.

log versus log-append: bukti dan penghapusan

log-append menambahkan pada apa yang sudah ada di berkas. log membuka berkas untuk ditulis dan memotongnya, sehingga berpindah di antara keduanya dapat menghapus jalannya proses yang hendak Anda baca.

Jika seseorang mengubah direktif saat men-debug, bukti sebelumnya sudah hilang dan ukuran berkas akan tampak mencurigakan kecil. Itu perlu diketahui sebelum Anda membandingkan dua kali jalan dan menyimpulkan ada yang berubah. Hapus log dengan sengaja atau pertahankan, tetapi ketahui mana yang Anda lakukan. Bukti yang Anda singkirkan dengan sengaja lebih mudah dinalar daripada bukti yang hilang tanpa sengaja.

Tidak ada dari kedua pilihan itu yang membuat direktori induk yang hilang, dan tidak ada yang memberi akses lewat izin sistem berkas atau sandbox layanan. Jalur yang tampak benar di konfigurasi bisa tetap tidak dapat ditulisi oleh akun tempat daemon berjalan, dan dalam hal itu daemon bisa gagal sebelum dapat melaporkan apa pun. Periksa keberadaan direktori dan pemiliknya sebelum menganggap nama berkas sebagai masalah.

Ketika pembungkus layanan menangkap keluarannya

Di systemd, keluaran standar dan galat masuk ke journal kecuali direktif berkas yang eksplisit lebih diutamakan, dan pembungkus dari vendor dapat menangkapnya di tempat yang sama sekali lain.

Itu sebabnya profil yang sama berperilaku berbeda dari shell dan dari unit. Lingkungan unit, direktori kerjanya, dan aliran standarnya semuanya berbeda dari shell interaktif Anda. Jalur relatif dapat terselesaikan di satu konteks dan tidak mendarat di mana pun di konteks lain. Baca definisi unit ketika keduanya berselisih, bukan profilnya.

Bandingkan kedua tataan peluncuran alih-alih menyimpulkan salah satunya rusak. Baca baris perintah unit dan lingkungannya, lalu baca journal untuk jendela waktu yang sama. Jika pembungkus mengalihkan keluaran ke berkasnya sendiri, berkas itulah log Anda sekarang, dan direktif OpenVPN tidak relevan bagi ke mana pesannya pergi.

Naikkan verbositas hanya setelah Anda dapat membacanya

Menaikkan verbositas sebelum menemukan tujuannya hanya menghasilkan lebih banyak teks di tempat yang tidak Anda lihat.

Setelah tahu ke mana keluaran mendarat, tingkat sedang menunjukkan profil sedang diurai dan koneksi sedang dicoba. Dua atau tiga cukup untuk masalah awal. Tingkat yang lebih tinggi berguna ketika kegagalannya adalah detail negosiasi, dan itu juga membuat berkas cepat membesar.

Lalu baca galat yang sebenarnya. Terminal yang diam tidak membuktikan apa pun tentang apakah terowongan naik, dan kegagalan yang tercatat di berkas itulah yang layak diperbaiki.

Artikel terkait