
Debian 10을 실행하는 ESXi 가상 머신이 있는데 postfix가 너무 일찍 시작되는 문제가 발생했습니다. 이로 인해 resolv.conf가 postfix chroot 이전에 채워지지 않는 문제가 발생합니다. 나는 둘 다 확신했다
- /lib/systemd/system/postfix.service
- /lib/systemd/시스템/[이메일 보호됨]
파일에 줄이 있습니다
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 마운트를 제공하기 전에 약간의 시간이 더 필요했습니다. 해결 방법으로 다음을 수행할 수 있습니다.
- 네트워크 서비스 이후와 postfix 이전에 실행될 서비스를 만듭니다.
- 네트워크 서비스 지연 설정(PostExec 스탠자일 수도 있음)
- 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
물론 이는 해결 방법일 뿐이므로 버그를 통해 해결해야 합니다.