Linux
Systemd - 在標準 libvirt-guests.service 之前執行自定義 VM 關閉腳本
在 KVM 主機上,我有一些帶有不監聽 ACPI 關閉事件的舊版作業系統的虛擬機。就像在 Debian 9.5 主機上發生的那樣,關閉
libvirt-guests.service
時每個此類 VM 等待 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
?
該
Before=
聲明涉及服務的啟動。從man systemd.unit
.如果單元 foo.service 包含設置 Before=bar.service 並且兩個單元都在啟動,則 bar.service 的啟動將延遲到 foo.service 完成啟動。
…
請注意,當兩個具有順序依賴關係的單元關閉時,將應用與啟動順序相反的順序。即,如果一個單元在另一個單元上配置了 After=,如果兩者都關閉,則前者在後者之前停止。
所以你想配置你的服務,
After=libvirt-guests.service
因為服務在啟動之後libvirt-guests.service
啟動,你的服務在停止之前libvirt-guests.service
停止。