Wie lässt man systemd network-online.target auf mehrere Netzwerke warten?

Wie lässt man systemd network-online.target auf mehrere Netzwerke warten?

Wir haben eine virtuelle ESXi-Maschine mit Debian 10 und haben ein Problem mit dem zu frühen Start von Postfix. Dies führt dazu, dass resolv.conf vor dem Postfix-Chroot nicht gefüllt wird. Ich habe sichergestellt, dass beide

Dateien haben die Zeile

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

Wir haben jedoch mehrere Netzwerkkarten in dieser VM installiert, wobei die Datei /etc/network/interfaces Folgendes enthält:

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

Wenn ich laufe

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

Ich sehe, dass network-online.target nur darauf wartet, dass eine der Netzwerkkarten online ist.

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

Ich dachte, man könnte in die Netzwerkkonfiguration etwas schreiben, um anzugeben, dass eine Verbindung erforderlich ist, bevor das Betriebssystem das Netzwerk als aktiv betrachtet, aber ich kann diese Information scheinbar nicht finden.

Bevor ich etwas zusammenschustere, das für uns ausreichend funktioniert, würde ich gerne wissen, wie ich network-online.target dazu bringe, entweder auf alle Netzwerkkarten oder vorzugsweise auf die von mir angegebenen zu warten.- Bearbeiten -der Trick, von dem ich sprach, war eine Verzögerung bei der Startreihenfolge.

Bearbeiten: Ich habe einen Link zu dem gefunden, woran ich dachte, aber es ist in CentOS und ist dasIPV4_FAILURE_FATAL=jaZeile zu einer der ifcfg-Dateien hinzugefügt. Hat Debian etwas Ähnliches und glauben Sie, dass dies das Auslösen der systemd-Ziele beeinflussen würde?

Bearbeiten: die Aktivierung der systemd-Networkd-Dienste scheint hilfreich zu sein, wenn man darüber liestsystemd-networkd-wait-online.service. Bevor ich zur Verwendung des Network Manager (networkd)-Konfigurations-Setups übergehe: Habe ich das richtig gelesen und würde das dieses Problem lösen?

Antwort1

Systemd geht automatisch davon aus, dass das Netzwerk online ist, solange das Ziel (ich vermute, es hängt entweder von network.service oder NetworkManager.service unter RHEL ab) meldet, dass es gestartet ist. Wir haben ein Problem mit dnsmasq, das meldet, dass es gestartet ist, aber eigentlich benötigte es nur ein wenig mehr Zeit, bevor es NFS-Mounts bereitstellte. Als Workaround können Sie Folgendes tun:

  1. Erstellen Sie einen Dienst, der nach Ihrem Netzwerkdienst und vor Ihrem Postfix ausgeführt wird
  2. Legen Sie eine Verzögerung in Ihrem Netzwerkdienst fest (beispielsweise eine PostExec-Strophe).
  3. Erstellen Sie eine „Prestart-Verzögerung“ über den Eintrag „ExecStartPre=“ in Ihrem Postfix-Dienst

Hier ist ein Beispiel für den network.service unter CentOS7:

# /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

Für 2) können Sie etwa Folgendes erstellen:

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

Für 3) können Sie etwas wie Folgendes erstellen:

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

Natürlich handelt es sich dabei nur um Workarounds und das Problem muss über einen Fehler behoben werden.

verwandte Informationen