systemd network-online.target が複数のネットワークを待機するようにするにはどうすればよいですか?

systemd network-online.target が複数のネットワークを待機するようにするにはどうすればよいですか?

Debian 10を実行しているESXi仮想マシンがあり、postfixの起動が早すぎるという問題が発生しています。これにより、postfix chrootの前にresolv.confが設定されないという問題が発生します。

ファイルには次の行があります

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 の 1 つがオンラインになるまで待機するだけであることがわかります。

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 ファイルの 1 つに行が追加されました。Debian には同様の機能がありますか? また、それが systemd ターゲットのトリガーに影響すると思いますか?

編集: systemdネットワークサービスを有効にすると、役に立つかもしれないようです。systemd-networkd-wait-online.サービス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

もちろん、これらは単なる回避策であり、バグを通じて対処する必要があります。

関連情報