systemd-networkdを使用してnetwork.targetがDHCPを待つように強制する方法は?

systemd-networkdを使用してnetwork.targetがDHCPを待つように強制する方法は?

私は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.targetDHCPスタンバイに依存するようにします。これは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.htmlroutableIPを待っているので選択しました。

答え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は依存サービスを開始する前にその状態が表示されるのを待つことができます。

関連情報