Systemd - 在标准 libvirt-guests.service 之前运行自定义 VM 关闭脚本

Systemd - 在标准 libvirt-guests.service 之前运行自定义 VM 关闭脚本

在 KVM 主机上,我有几个虚拟机,它们运行的​​是旧版操作系统,不会监听 ACPI 关机事件。就像 Debian 9.5 主机上的情况一样,关机时,libvirt-guests.service每个这样的虚拟机都会等待 5 分钟,然后销毁它。

为了避免这种情况并彻底关闭它们,我创建了自定义 VM 关闭服务,并使用特殊方法关闭它们的脚本:

% cat /etc/systemd/system/multi-user.target.wants/vm_stop.service 

[Unit]
Description=vm_shutdown
Before=libvirt-guests.service

[Service]
ExecStart=/bin/true
ExecStop=/usr/local/bin/vm_shutdown_all.sh

[Install]
WantedBy=multi-user.target

然而,在关闭时,该服务似乎运行 libvirt-guests.service尽管Before=上述服务有这样的设置。

现在,我已经测试了自定义服务是否确实在关机时运行 - 它touch是一个我可以验证它的测试文件。

问题:我如何确保它在之前运行libvirt-guests.service

答案1

Before=声明与该服务的启动有关。来自man systemd.unit

如果单元 foo.service 包含设置 Before=bar.service 并且两个单元都正在启动,则 bar.service 的启动将被延迟,直到 foo.service 完成启动。...

注意,当两个相互之间存在顺序依赖关系的单元关闭时,将应用启动顺序的逆转。即,如果一个单元在另一个单元上配置了 After=,则如果两个单元都关闭,则前者将在后者之前停止。

因此,您需要将您的服务配置为在启动After=libvirt-guests.service之后启动该服务,并在停止之前停止该服务。libvirt-guests.servicelibvirt-guests.service

相关内容