我正在尝试编写一个service
依赖于远程systemd 服务的 systemd。是否有任何“标准”方式来完成像这样奇怪的事情?用例是一些需要远程端点在启动时准备好的遗留软件。
我知道我可以在服务中使用类似于wait-for-thisExecStartPre
的东西来检查/等待,直到某个特定的远程 TCP 端口可用(并且可能.socket
在远程上编写一个简单的单元)。但这似乎有点矫枉过正。systemd 本身是否有与另一个远程 systemd 通信的方法?
我正在尝试编写一个service
依赖于远程systemd 服务的 systemd。是否有任何“标准”方式来完成像这样奇怪的事情?用例是一些需要远程端点在启动时准备好的遗留软件。
我知道我可以在服务中使用类似于wait-for-thisExecStartPre
的东西来检查/等待,直到某个特定的远程 TCP 端口可用(并且可能.socket
在远程上编写一个简单的单元)。但这似乎有点矫枉过正。systemd 本身是否有与另一个远程 systemd 通信的方法?
重新启动/关闭时遇到了一个最烦人的问题。出于某种奇怪的原因,关闭总是需要“最大”时间。
我已经能够追踪到原因是networking.service
在 90 秒时超时,试图关闭一堆接口。我怀疑这也会在启动时导致一些不必要的延迟(大约 30 秒),但我可以忍受。
我的网络由一个物理接口组成,在其之上有几个 VLAN 和网桥。物理接口和 VLAN 都没有与之关联的任何地址,即:
allow-hotplug enp2s0
iface enp2s0 inet manual
auto vlan2
iface vlan2 inet manual
vlan_raw_device enp2s0
auto br2
iface br2 inet manual
bridge_ports vlan2
系统本身没有直接的网络访问(没有 IPv4 地址),而是充当虚拟机的主机(因此是网桥),然后由它处理网络。除了关机,一切都很好。
有谁知道是什么原因造成的?
关机日志(来自journalctl -b -1
)显示以下内容:
Oct 03 09:09:25 myhostname systemd[1]: Deactivated swap /dev/disk/by-uuid/6db311a2-97ef-479c-8e35-d7f760c3d3b0.
Oct 03 09:09:25 myhostname kernel: br0: port 1(enp2s0) entered disabled state
Oct 03 09:09:25 myhostname kernel: br10: port 1(vlan10) entered disabled state
Oct 03 09:09:25 myhostname kernel: br3: port 1(vlan3) entered disabled state
Oct 03 09:09:25 myhostname kernel: br2: port 1(vlan2) entered disabled state
Oct 03 09:09:35 myhostname kernel: device vlan10 left promiscuous mode
Oct 03 09:09:35 myhostname kernel: br10: port 1(vlan10) entered disabled state
Oct 03 09:09:35 myhostname systemd[1]: Stopped ifup for enp2s0.
Oct 03 09:09:35 myhostname systemd[1]: Stopped ifup for enp3s0.
Oct 03 09:09:35 myhostname kernel: IPv6: ADDRCONF(NETDEV_UP): vlan10: link is not ready
Oct 03 09:09:45 myhostname ifdown[5961]: Removed VLAN -:vlan10:-
Oct 03 09:09:55 myhostname ifdown[5961]: Removed VLAN -:vlan6:-
Oct 03 09:10:05 myhostname ifdown[5961]: Removed VLAN -:vlan5:-
Oct 03 09:10:15 myhostname kernel: device vlan3 left promiscuous mode
Oct 03 09:10:15 myhostname kernel: br3: port 1(vlan3) entered disabled state
Oct 03 09:10:15 myhostname kernel: IPv6: ADDRCONF(NETDEV_UP): vlan3: link is not ready
Oct 03 09:10:25 myhostname ifdown[5961]: Removed VLAN -:vlan3:-
Oct 03 09:10:35 myhostname kernel: device vlan2 left promiscuous mode
Oct 03 09:10:35 myhostname kernel: br2: port 1(vlan2) entered disabled state
Oct 03 09:10:35 myhostname kernel: IPv6: ADDRCONF(NETDEV_UP): vlan2: link is not ready
Oct 03 09:10:45 myhostname ifdown[5961]: Removed VLAN -:vlan2:-
Oct 03 09:10:55 myhostname systemd[1]: networking.service: Stopping timed out. Terminating.
Oct 03 09:10:55 myhostname systemd[1]: networking.service: Control process exited, code=killed status=15
很明显,发生了一些奇怪的事情。我正在运行 Debian 9.5。
我正在尝试利用 netplan 的能力来用字典顺序上的文件覆盖配置,但是当这些文件来自另一个挂载点时,整个事情都会失败。
我创建了一个带有几个接口的虚拟机,这些接口使用/etc/netplan/01-primary.yaml
和/etc/netplan/02-local.yaml
(基本上说“使用 dhcp”)之类的文件配置了合理的默认值。那部分效果很好。但是,我想要实现的是使用可选驱动器安装覆盖设置的能力。
为此,我添加了一个挂载点,/etc/fstab
其中包含以下内容:
/dev/vdb /mnt/config ext4 defaults,nofail,x-systemd.device-timeout=10,x-systemd.before=systemd-networkd.service 0 0
然后我添加/etc/netplan
了指向新配置文件的符号链接,例如ln -s /mnt/config/netplan/11-primary.yaml /etc/netplan/11-primary.yaml
.
我的第一个问题是,如果驱动器不存在且未安装,则整个 netplan 生成在引导时会失败,并且我没有任何接口(我已发布有关缺少指向 netplan的符号链接的错误报告)。我设法通过简单地创建带有空文件的必要目录结构来克服这个问题/mnt/config
。但是,即使存在驱动器,netplan 在引导时也不会看到这些文件。如果我运行netplan generate
并netplan apply
在启动后,所有接口都会正确配置。
我尝试了许多不同x-systemd.before
的目标,但没有一个有效。有没有办法让它正常工作?配置挂载应该是可选的,以便可以在没有配置的情况下启动虚拟机。