如何讓systemd network-online.target等待多個網路?

如何讓systemd network-online.target等待多個網路?

我們有一個運行 Debian 10 的 ESXi 虛擬機,但遇到了 postfix 啟動過早的問題。這會導致在後綴 chroot 之前未填入 resolv.conf 的問題。我已確保兩者

文件有一行

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

但是,我們在此虛擬機器中安裝了多個網路卡,/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 只等待其中一個網卡在線。

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

我認為您可以在網頁配置中編寫一些內容來指示在作業系統認為網路已啟動之前需要連接,但我似乎找不到該資訊。

在我整理出一些對我們來說足夠有效的東西之前,我想知道如何使 network-online.target 等待所有網卡,或者最好是我指定的網卡。- 編輯 -我提到的問題是增加了啟動順序的延遲。

編輯:我找到了我想要的鏈接,但它在 CentOS 中,並且是IPV4_FAILURE_FATAL=是行添加到 ifcfg 檔案之一。 Debian 是否有類似的東西,您認為這會影響 systemd 目標的觸發嗎?

編輯:在閱讀相關內容時,啟用 systemd 網路服務看起來可能會有所幫助systemd-networkd-wait-online.service。在我轉換為使用網路管理員(網路)配置設定之前,我是否正確閱讀了該內容並且它可以解決此問題?

答案1

只要目標(我猜這取決於 RHEL 上的 network.service 或 NetworkManager.service)報告網路已啟動,Systemd 就會自動假定網路處於線上狀態。我們在 dnsmasq 報告它已啟動時遇到了問題,但實際上它在提供 NFS 掛載服務之前只需要多一點時間。作為解決方法,您可以:

  1. 建立一個將在網路服務之後、後綴之前執行的服務
  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

當然,這些只是解決方法,需要透過錯誤來解決。

相關內容