私はsystemd-networkdを使ってインターフェイスを設定しています。
[Match]
Name=enp3s0
[Network]
DHCP=v4
起動時以外はうまく機能し、一部のサービスはDHCPが完了するのを待ちません。たとえば、NFSマウントとnginxはネットワークなしで起動されたため、失敗しました。
network.targetがDHCPを待つように強制する方法はありますか?
編集者注。 ~によると文書:
多くのネットワーク管理ソリューションは、network-online.targetを無条件にプルする方法を提供し、network.targetの効果をnetwork-online.targetの効果にアップグレードします。
systemd-networkdを使用している場合は、systemd-networkd-wait-online.serviceを有効にしてこれを実行できます。
systemctl enable systemd-networkd-wait-online.service
しかし、これを試しました。いいえサービスがnetwork.target
DHCPスタンバイに依存するようにします。これはDHCPスタンバイに明示的に依存するサービスのみを提供し、network-online.target
実際にこれが正しく機能するために必要です。
答え1
systemd-networkdを使用しているときにすべてのインターフェイスが動作しており、IPアドレスが割り当てられていることを確認するには、次のようにします。
systemctl enable systemd-networkd-wait-online.service
他の人がNetworkManagerを使用している可能性があります。この場合、次のようになります。
systemctl enable NetworkManager-wait-online.service
望むより:http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
答え2
実際、この文脈では、「オンライン」の定義はファイルで.network
定義されています。
[Link]
RequiredForOnline=routable
https://www.freedesktop.org/software/systemd/man/systemd.network.html#RequiredForOnline=
https://www.freedesktop.org/software/systemd/man/systemd.network.html#RequiredFamilyForOnline=
RequiredForOnline
デフォルト値があり、yes
その定義が見つかりません。ただし、ここにリストされている値のいずれかに設定する必要があります。https://www.freedesktop.org/software/systemd/man/networkctl.htmlroutable
IPを待っているので選択しました。
答え3
マニュアルページによるとsystemd-networkd-wait-online.service:
デフォルトでは、systemd-networkd.service(8)によって管理されているすべてのリンクが完全に構成または失敗するまで、少なくとも1つのリンクがオンラインになるのを待ちます。ここでオンラインとは、リンクの動作状態が「低下」以上であることを意味します。 --Operational-state=オプションを使用してしきい値を設定できます。
したがって、特定のリンクを完全に設定およびルーティングできるようにして「オンライン」と見なすには、以下を編集して/lib/systemd/system/systemd-networkd-wait-online.service
変更できますExecStart
。
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --operational-state=routable
答え4
ほとんどのLinuxバリアントはネットワークマネージャを使用して、ネットワークが正しく機能していることをsystemd
確認します。NetworkManager-wait-online.service
この場合、以下を編集し/lib/systemd/system/NetworkManager-wait-online.service
て変更できます。
ExecStart=/usr/bin/nm-online -s -q --timeout=30
到着する:
ExecStart=/usr/bin/nm-online -q --timeout=30
-sオプションの意味は、特にネットワーク接続を待つのではなく、NetworkManagerの起動が完了するのを待つことです。
これを削除すると、ネットワークの状態をよりよく知ることができ、systemdは依存サービスを開始する前にその状態が表示されるのを待つことができます。