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)에 의해 관리되는 모든 링크가 완전히 구성되거나 실패할 때까지, 그리고 적어도 하나의 링크가 온라인 상태가 될 때까지 기다립니다. 여기서 온라인이란 링크의 작동 상태가 "저하" 이상임을 의미합니다. --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는 종속 서비스를 시작하기 전에 해당 상태가 나타날 때까지 기다릴 수 있습니다.

관련 정보