Menjalankan systemctl start openvpn-client@office lalu menerima mesej bahawa sistem tidak di-boot dengan systemd kelihatan seperti kegagalan perkhidmatan. Ia sama sekali bukan kegagalan perkhidmatan: systemctl yang anda panggil tidak menemui pengurus yang berjalan untuk berbual, jadi tiada apa tentang OpenVPN diperiksa. sudo tidak mencipta pengurus, dan memasang fail unit juga tidak menciptanya. Perintah dan mesin datang dari dua dunia berbeza, dan ralat itu satu-satunya tempat perkara itu terlihat.

Mulakan dengan bertanya proses mana yang memiliki PID 1 di tempat perintah dijalankan, kerana jawapan itu menentukan sama ada unit wujud langsung.

Ralat itu menamakan persekitaran, bukan OpenVPN

systemctl ialah klien, bukan pengurus. Ia bersambung ke pengurus sistem melalui soket, dan apabila tiada pengurus di hujung sana, ia mencetak mesej yang orang tampal di forum. ps -p 1 -o pid=,comm= menunjukkan apa yang sebenarnya berjalan sebagai PID 1, dan jawapannya selalunya shell, pembalut init atau titik masuk kontena itu sendiri. Dalam keadaan itu fail unit boleh menjadi sah sepenuhnya dan masih tidak pernah dibaca. Mengulang perintah sebagai root hanya mengubah kelayakan klien.

Baca keseluruhan mesej sebelum baris pertama. Ralat daripada pengurus itu sendiri, seperti unit yang hilang atau syarat yang gagal, bermakna anda telah mencapainya; ralat ini bermakna anda belum.

WSL: mendayakan systemd ialah perubahan konfigurasi

WSL mendapat sokongan systemd dalam keluaran kemudian, tetapi ciri ini didayakan bagi setiap distribusi dan hanya di tempat versi WSL yang dipasang menyokongnya. wsl --version di sebelah Windows menunjukkan apa yang anda ada, dan /etc/wsl.conf distribusi mengandungi [boot] bahagian dengan systemd=true. Sunting fail itu tanpa membuang bahagian yang sudah ada, kemudian mula semula instans WSL supaya perubahan berkuat kuasa. wsl --shutdown menghentikan setiap distribusi yang berjalan, jadi simpan kerja anda dahulu.

Selepas membukanya semula, sahkan pengurus sebelum menyentuh unit OpenVPN: ps -p 1 -o comm= sepatutnya menunjukkan systemd. Mendayakan systemd tidak memberikan profil, kelayakan atau nama instans, jadi ralat seterusnya akan melibatkan salah satu daripadanya, bukan PID 1.

Kontena menjalankan titik masuknya, bukan unit

Kontena biasa memulakan apa yang ditentukan oleh titik masuk atau perintahnya, dan ia bukan mesin yang di-boot dengan systemd, apa pun pakej yang anda pasang. Menambah systemctl ke imej memberi anda klien tanpa apa-apa untuk disambung. Untuk Community OpenVPN, corak yang disokong biasanya proses di latar hadapan, openvpn --config /path/to/client.conf, dimulakan oleh titik masuk dan diselia dari luar. Pemilik itu mengendalikan permulaan, isyarat dan penutupan, dan ia sepatutnya satu-satunya yang mengurus terowong.

Jangan sekali-kali melancarkan salinan interaktif di sebelah titik masuk yang sudah mengurus terowong itu, kerana dua proses akan berebut peranti dan laluan. Proses init minimum di dalam kontena mengutip anak dan menyalurkan isyarat; ia tidak menjadikan imej itu hos yang mempunyai unit.

Jika sesuatu penggunaan benar-benar memerlukan systemd di dalam kontena, ia memerlukan imej yang direka khusus untuk itu, bukan keistimewaan tambahan yang ditambah sehingga systemctl berhenti merungut.

Baca ralat seterusnya setelah pengurus wujud

Sebaik sahaja pengurus sebenar melancarkan perkhidmatan, ralat yang berguna bermula. Kegagalan kebenaran peranti, ralat penghuraian konfigurasi, kelayakan yang hilang dan rakan yang tidak dapat dicapai ialah empat masalah berbeza yang tidak pernah diuji oleh mesej PID 1. Bacalah mengikut urutan unit menghasilkannya, dengan journalctl -u openvpn-client@office -n 50 pada hos systemd, atau dengan menjalankan klien di latar hadapan di tempat tiada pengurus. Menjalankan di latar hadapan juga cara terpantas untuk mengesahkan bahawa profil itu sendiri berfungsi.

Asingkan kedua-dua persekitaran dalam nota anda: hos yang menjalankan terowong, dan tempat anda menaip perintah.

Artikel berkaitan