systemd network-online.target이 여러 네트워크를 기다리게 만드는 방법은 무엇입니까?

systemd network-online.target이 여러 네트워크를 기다리게 만드는 방법은 무엇입니까?

Debian 10을 실행하는 ESXi 가상 머신이 있는데 postfix가 너무 일찍 시작되는 문제가 발생했습니다. 이로 인해 resolv.conf가 postfix chroot 이전에 채워지지 않는 문제가 발생합니다. 나는 둘 다 확신했다

파일에 줄이 있습니다

After=network-online.target nss-lookup.target

그러나 이 VM에는 여러 개의 NIC가 설치되어 있으며 /etc/network/interfaces 파일에는 다음이 포함되어 있습니다.

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens192
iface ens192 inet static
        address 10.1.0.29/21
        dns-nameservers 10.1.0.20 10.1.0.23 

# The secondary network interface
allow-hotplug ens224
iface ens224 inet static
        address 192.168.1.8/24
        gateway 192.168.1.240

내가 달릴 때

grep -E "(Postfix Mail Transport Agent|e1000|Link is Up|link is not ready|link becomes ready|resolv.conf differ|target)" /var/log/syslog

network-online.target은 NIC 중 하나가 온라인 상태가 될 때까지만 기다립니다.

Jan 12 18:46:54 assp0 kernel: [    1.738897] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
Jan 12 18:46:54 assp0 kernel: [    1.738897] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
Jan 12 18:46:54 assp0 kernel: [    1.739922] e1000e 0000:0b:00.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
Jan 12 18:46:54 assp0 kernel: [    1.795419] e1000e 0000:0b:00.0 0000:0b:00.0 (uninitialized): registered PHC clock
Jan 12 18:46:54 assp0 kernel: [    1.859484] e1000e 0000:0b:00.0 eth0: (PCI Express:2.5GT/s:Width x1)
Jan 12 18:46:54 assp0 kernel: [    1.859486] e1000e 0000:0b:00.0 eth0: Intel(R) PRO/1000 Network Connection
Jan 12 18:46:54 assp0 kernel: [    1.859558] e1000e 0000:0b:00.0 eth0: MAC: 3, PHY: 8, PBA No: 000000-000
Jan 12 18:46:54 assp0 kernel: [    1.860245] e1000e 0000:13:00.0: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
Jan 12 18:46:54 assp0 kernel: [    1.915403] e1000e 0000:13:00.0 0000:13:00.0 (uninitialized): registered PHC clock
Jan 12 18:46:54 assp0 kernel: [    1.979239] e1000e 0000:13:00.0 eth1: (PCI Express:2.5GT/s:Width x1)
Jan 12 18:46:54 assp0 kernel: [    1.979240] e1000e 0000:13:00.0 eth1: Intel(R) PRO/1000 Network Connection
Jan 12 18:46:54 assp0 kernel: [    1.979290] e1000e 0000:13:00.0 eth1: MAC: 3, PHY: 8, PBA No: 000000-000
Jan 12 18:46:54 assp0 kernel: [    1.981312] e1000e 0000:0b:00.0 ens192: renamed from eth0
Jan 12 18:46:54 assp0 kernel: [    1.994070] e1000e 0000:13:00.0 ens224: renamed from eth1
Jan 12 18:46:54 assp0 kernel: [    4.577652] IPv6: ADDRCONF(NETDEV_UP): ens224: link is not ready
Jan 12 18:46:54 assp0 kernel: [    4.583595] e1000e: ens224 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jan 12 18:46:54 assp0 systemd[1]: Reached target Swap.
Jan 12 18:46:54 assp0 systemd[1]: Reached target System Initialization.
Jan 12 18:46:54 assp0 systemd[1]: Reached target Sockets.
Jan 12 18:46:54 assp0 systemd[1]: Reached target Basic System.
Jan 12 18:46:54 assp0 systemd[1]: Reached target Timers.
Jan 12 18:46:54 assp0 systemd[1]: Reached target Network.
Jan 12 18:46:54 assp0 systemd[1]: Reached target Network is Online.
Jan 12 18:46:54 assp0 systemd[1]: Starting Postfix Mail Transport Agent (instance -)...
Jan 12 18:46:54 assp0 systemd[1]: Reached target Login Prompts.
Jan 12 18:46:54 assp0 kernel: [    4.671007] IPv6: ADDRCONF(NETDEV_UP): ens192: link is not ready
Jan 12 18:46:54 assp0 kernel: [    4.671206] IPv6: ADDRCONF(NETDEV_CHANGE): ens224: link becomes ready
Jan 12 18:46:54 assp0 kernel: [    4.675749] e1000e: ens192 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Jan 12 18:46:54 assp0 kernel: [    4.676553] IPv6: ADDRCONF(NETDEV_CHANGE): ens192: link becomes ready
Jan 12 18:46:55 assp0 postfix/postfix-script[750]: warning: /var/spool/postfix/etc/resolv.conf and /etc/resolv.conf differ

OS가 네트워크가 작동 중이라고 간주하기 전에 연결이 필요함을 나타내기 위해 네트워크 구성에 작성할 수 있는 내용이 있다고 생각했지만 해당 정보를 찾을 수 없는 것 같습니다.

우리에게 충분히 작동하는 것을 하나로 묶기 전에 network-online.target이 모든 NIC 또는 가급적이면 내가 지정한 NIC를 기다리게 만드는 방법을 알고 싶습니다.- 편집하다 -내가 말한 문제는 부팅 순서에 지연을 추가하는 것이었습니다.

편집하다: 제가 생각하고 있던 링크를 찾았는데 CentOS에 있고IPV4_FAILURE_FATAL=예ifcfg 파일 중 하나에 행이 추가되었습니다. 데비안에도 비슷한 것이 있는데, 이것이 시스템 대상의 트리거링에 영향을 미칠 것이라고 생각하십니까?

편집하다: 시스템화된 네트워크 서비스를 활성화하는 것이 도움이 될 것 같습니다.systemd-networkd-wait-online.service. Network Manager(networkd) 구성 설정을 사용하여 변환하기 전에 해당 내용을 올바르게 읽고 있습니까? 그러면 이 문제가 해결됩니까?

답변1

Systemd는 대상(RHEL의 network.service 또는 NetworkManager.service에 따라 다름)이 시작되었다고 보고하는 한 네트워크가 온라인 상태라고 자동으로 가정합니다. dnsmasq가 시작되었다고 보고하는 데 문제가 있지만 실제로는 NFS 마운트를 제공하기 전에 약간의 시간이 더 필요했습니다. 해결 방법으로 다음을 수행할 수 있습니다.

  1. 네트워크 서비스 이후와 postfix 이전에 실행될 서비스를 만듭니다.
  2. 네트워크 서비스 지연 설정(PostExec 스탠자일 수도 있음)
  3. postfix 서비스의 "ExecStartPre=" 항목을 통해 "사전 시작 지연"을 만듭니다.

다음은 CentOS7의 network.service 예입니다.

# /run/systemd/generator.late/network.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/network
Description=LSB: Bring up/down networking
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=network-online.target
Before=network.target
Before=vxpbx_exchanged.service

2)의 경우 다음과 같이 만들 수 있습니다.

#cat /etc/systemd/system/network.service.d/01-delay.conf
[Service]
ExecStartPost=/bin/sleep 5

3)의 경우 다음과 같은 것을 만들 수 있습니다.

#cat /etc/systemd/system/postfix.service.d/01-delay.conf
[Service]
ExecStartPre=/bin/sleep 5

물론 이는 해결 방법일 뿐이므로 버그를 통해 해결해야 합니다.

관련 정보