Sistemd ağ yapılandırması bağımlılıklarında
Sistemin birim siparişini etkilemek çok kolaydır. Öte yandan, tamamlanmış bir birimin ne garanti ettiği konusunda dikkatli olmanız gerekir.
Hizmetinizi yapılandırın
Mevcut sistemlerde, sipariş verme, network.target
yalnızca gerçek bir yapılandırma olmadığı için şebeke servisinin başlatıldığını garanti eder. Bunun için sipariş vermeniz network-online.target
ve çekmeniz gerekir.
[Unit]
Wants=network-online.target
After=network-online.target
Eski sistemlerle uyumluluk için network.target'den sonra da sipariş vermeniz gerekebilir.
[Unit]
Wants=network-online.target
After=network.target network-online.target
Bu, servisin birim dosyası ve systemd için.
Yazılımın güncel sürümlerinde uygulama
Şimdi network-online.target
, beklendiği gibi çalıştığından (veya en azından kullanabildiğinizden network.target
) emin olmalısınız .
NetworkManager'ın şu anki sürümü , NetworkManager-wait-online.service
hangilerinin network-online.target
servisinize tarafından hangilerinin tarafından alındığını sunmaktadır. Bu özel servis, servisinizin başlatılması için yapılandırılan tüm bağlantıların otomatik olarak başarılı, başarısız veya zaman aşımına uğramasını beklemesini sağlar.
Geçerli systemd-networkd sürümü, tüm cihazlar istenen şekilde yapılandırılana kadar hizmetinizi engeller. Şu anda yalnızca önyükleme sırasında uygulanan yapılandırmaları desteklemesi daha kolaydır (daha özel olarak `systemd-networkd.service başlangıç zamanı).
Tamamlanması adına, /etc/init.d/network
Fedora'daki servis, sistemin geçerli sürümleri tarafından yorumlandığı gibi, blokları network.target
ve dolaylı olarak network-online.target
hizmetinizi ve hizmetinizi bloke eder . Komut dosyası tabanlı bir uygulama örneği.
Uygulamanız, ister servise dayalı isterse komut dosyası tabanlı olsun, yukarıdaki ağ yönetim hizmetlerinden biri olarak davranırsa, ağ yapılandırması başarılı bir şekilde tamamlanıncaya, iyi bir sebepten başarısız oluncaya ya da makul bir süreden sonra zaman aşımına uğrayana kadar hizmetinizin başlamasını geciktirir tamamlamak için çerçeve.
Netctl'in aynı şekilde çalışıp çalışmadığını kontrol etmek isteyebilirsiniz ve bu bilgi bu cevaba değerli bir katkı olacaktır.
Yazılımın eski sürümlerinde uygulamalar
Bunun işe yaramayacağı, yeterince eski bir sistem sürümü göreceğinizi sanmıyorum. Ancak en azından network-online.target
var olup olmadığını ve sonra sipariş edildiğini kontrol edebilirsiniz network.target
.
Önceden NetworkManager yalnızca en az bir bağlantının uygulanacağını garanti ediyordu. Ve bunun çalışması için bile, NetworkManager-wait-online.service
açıkça etkinleştirmeniz gerekir . Bu, Fedora'da uzun süre önce düzeltildi, ancak yalnızca son zamanlarda yukarı yönde uygulandı.
systemctl enable NetworkManager-wait-online.service
Network.target ve network-online.target uygulamalarına ilişkin notlar
Yazılımınızı hiçbir zaman belirli bir hizmete NetworkManager.service
veya NetworkManager-wait-online.service
başka bir hizmete bağımlı hale getirmeniz gerekmez . Bunun yerine, tüm ağ yönetimi hizmetleri önceden network.target
ve isteğe bağlı olarak kendilerini sipariş etmelidir network-online.target
.
Basit bir komut dosyası tabanlı ağ yönetimi hizmeti çıkmadan önce ağ yapılandırmasını bitirmeli ve daha önce network.target
ve böylece dolaylı olarak kendisini sipariş etmelidir network-online.target
.
[Unit]
Before=network.target
[Service]
Type=oneshot
ExecStart=...
RemainAfterExit=yes
Daemon tabanlı bir ağ yönetimi hizmeti, network.target
çok kullanışlı olmasa da, daha önce de sipariş vermelidir .
[Unit]
Before=network.target
[Service]
Type=simple
ExecStart=...
Artalanın bitmesini bekleyen bir servis, belirli bir hizmetten sonra ve daha önce kendisini sipariş etmelidir network-online.target
. Requisite
Servis sağlayıcısı servisini kullanmalıdır , böylece ilgili ağ yönetimi servisi kullanılmıyorsa derhal başarısız olur.
[Unit]
Requisite=...
After=...
Before=network-online.target
[Service]
Type=oneshot
ExecStart=...
RemainAfterExit=yes
Paket, yapılandırılmış ağı beklemek isteyen servisler tarafından çekilmesi için wants
dizindeki bekleme servisine bir bağlantı kurmalıdır network-online.target
.
ln -s /usr/lib/systemd/system/... /usr/lib/systemd/system/network-online.target.wants/
İlgili belgeler
Final notları
Umarım sorunuzu sorduğunuzda yanıtlamanıza yardım etmekle kalmayıp, aynı zamanda yukarı akış ve Linux dağıtımlarındaki durumu iyileştirmeye de katkıda bulundum, böylece orijinalini yazarken mümkün olandan daha iyi bir cevap verebilirim. .