Saya mencoba membuat layanan systemd di Debian Jessie. Saya perlu memulai setelah network-online.target
tercapai.
Masalahnya adalah network-online.target
kebakaran pada saat yang sama network.target
dan pada saat itu antarmuka saya belum dikonfigurasi, baru saja mulai permintaan DHCP.
Sepertinya masalah ini khusus untuk Debian karena menggunakan konfigurasi jaringan lawas.
Bagaimana cara memintas masalah ini atau bagaimana membuatnya network-online.target
bekerja?
debian
systemd
systemd-networkd
10robinho
sumber
sumber
systemctl list-dependencies network-online.target
? Juga, perhatikan bahwanetwork-online.target
mungkin tidak perlu berarti ada akses Internet. Lihat halaman ini untuk info lebih lanjut.network-online.target ● └─systemd-networkd-wait-online.service
Saya sudah membaca halaman itu, saya mengerti konsep dasar di sana, tetapi masih sangat aneh untuk tidak memiliki titik yang ditentukan di mana layanan jaringan kritis dapat dimulai. Setidaknya itu bisa menunggu penetapan DHCP yang tepat.network-online.target
hanya tergantung padasystemd-networkd-wait-online.service
pepatah bahwa itu sudah siap. Itu tidak tergantung pada NetworkManager yang mengatakan itu sudah siap, atau memeriksa apakahifup
semua tautan berhasil ditampilkan (jika Anda menggunakan metode itu untuk mengonfigurasi jaringan Anda). Ubuntu, di sisi lain, tergantung padaifup
dan NetworkManager, tetapi tidak untuksystemd-networkd-wait-online.
./etc/network/interfaces
:,.network
file systemd , atau NetworkManager?network-online.target
dannetwork.target
dipicu setelahnyaifup
. Saya menggunakan default debian, jadi/etc/network/interfaces
dengan alamat dhcp. Sepertinya networkd bisa menjadi solusi yang lebih baik, tetapi tidak mudah untuk diterapkan.Jawaban:
Karena Anda menggunakan
/etc/network/interfaces
, Anda akan memerlukan layanan systemd untuk memantau status setiap antarmuka. Periksa untuk melihat apakah Anda telah/lib/systemd/system/ifup-wait-all-auto.service
(diinstal olehifupdown
paket di Ubuntu 15.04). Jika tidak, maka buat/etc/systemd/system/ifup-wait-all-auto.service
, dan tempel berikut ini:Ini adalah file layanan yang ada pada sistem Ubuntu 15.04, tetapi dengan
[Install]
bagian yang ditambahkan untuk membuat segalanya lebih mudah. Saya berharap perilakuifup
di Ubuntu 15.04 sama dengan perilakuifup
di Debian Jessie. Jika tidak, beberapa modifikasi akan diperlukan (terutama dengan baris terakhir).Lalu, jalankan
sudo systemctl enable ifup-wait-all-auto.service
. Setelah mem-boot ulang komputer Anda, Anda akan melihat bahwanetwork-online.target
tercapai setelah antarmuka dinyalakan (setidaknya).sumber
ExecStart = /bin/bash -c 'while [ -z "$(hostname -I)" ]; do sleep 1; done;'
. Tergantunghostname
untuk memeriksa apakah alamat IP telah ditetapkan.ifup-wait-all-auto.service
telah dijatuhkan dalamifupdown
versi0.8.5ubuntu1
: "Drop ifup-wait-all-auto.service. Ini telah diimplementasikan lebih elegan dengan membuat network-online.target Ingin = networking.service secara langsung. “ [Perhatian! Baru saja mengetahuinya pada Raspbian Jessie: hapus SEMUA baris komentar di / etc / network interfaces dan itu akan berfungsi! Tampaknya menjadi parsing bug =) Dalam kasus khusus saya, saya telah meninggalkan komentar
iface eth0 inet dhcp
dan baru saja melupakannya beberapa tahun yang lalu, tetapi setelah upgrade ke Raspbian Jessie dan membangun kembali kernel, saya memiliki perilaku yang sangat aneh: ia menggunakan DHCP dan menolak untuk buat tuning dari / etc / network / interfaces. Jadi saya telah menghapusnya dari komentar - hanya bekerja, reboot - dan itu berfungsi! TIDAK DIBUTUHKAN PERJALANAN / PENGAJUAN SCRIPT!sumber
/etc/network/interfaces
file Anda - itu akan menyala jika masih ada.Per https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ cara yang disarankan untuk memulai layanan SETELAH jaringan tingkat adalah dengan menggunakan " network-online.target " dalam file .service :
Namun setelah menggunakan " network-online.target " dan layanan saya gagal karena jaringan tidak sepenuhnya level, saya menemukan ada bug ( https://github.com/coreos/bugs/issues/1966 ) dengan itu: tidak dijamin untuk menjadi 100% sempurna.
Memang, di mana alat konfigurasi jaringan dinamis seperti " NetworkManager " digunakan seperti dalam kasus ini, keadaan jaringan tidak pernah bisa 100% tepat atau dapat diprediksi. Rupanya dari tautan yang menggambarkan bug, " network-online.target " dapat berperilaku tidak konsisten tergantung pada berbagai aplikasi yang digunakannya.
Penanganan masalah :
Anda perlu menganalisis urutan layanan start-up dan menggunakan yang memulai lebih lambat dari " network-online.target ":
Ini adalah proses berulang mengubah target secara bertahap ke layanan nanti dan kemudian sampai Anda menemukan satu yang memastikan jaringan tingkat dan layanan Anda mulai tanpa kesalahan. Dalam kasus saya sendiri, saya bahkan harus memasukkan
sleep 10
skrip saya ke dalam layanan SystemD.sumber
Saya pernah menemukan jawaban pada Github yang menyelesaikannya dengan terus mencoba melakukan ping ke server. Hanya ketika ping masuk, layanan berlanjut:
Saya diganti
google.com
dengan server saya sendiri karena skrip utama saya perlu terhubung ke server saya.sumber