
У нас есть виртуальная машина ESXi, работающая под управлением Debian 10, и мы сталкиваемся с проблемой слишком раннего запуска postfix. Это приводит к проблемам с resolv.conf, который не заполняется до chroot postfix. Я убедился, что оба
- /lib/systemd/system/postfix.service
- /lib/systemd/система/[email protected]
файлы имеют строку
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. Прежде чем переходить на использование конфигурации Network Manager (networkd), правильно ли я понял, и решит ли это проблему?
решение1
Systemd автоматически предполагает, что сеть находится в сети, пока цель (я полагаю, это зависит от network.service или NetworkManager.service в RHEL) сообщает, что она запущена. У нас возникла проблема с dnsmasq, сообщающим о запуске, но на самом деле ему требовалось немного больше времени, прежде чем обслуживать монтирования NFS. В качестве обходного пути вы можете:
- Создайте службу, которая будет выполняться после вашей сетевой службы и перед вашим постфиксом
- Установите задержку в вашей сетевой службе (возможно, строфу PostExec)
- Создайте «задержку перед запуском» с помощью записи «ExecStartPre=" в вашей службе postfix
Вот пример network.service на 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
Для 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
Конечно, это всего лишь обходные пути, и эту проблему необходимо решать с помощью ошибки.