[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH] shutting down guest vms on host shutdown does not work



Hi,

I originally postet this into the Fedora bugzilla
https://bugzilla.redhat.com/show_bug.cgi?id=843836
but was asked by Eric to post it here for review.

Currently gracefully shutting down guest vms on host shutdown does not work on 
Fedora 17, the guests are killed hard on system shutdown.

I use:
fedora-release-17-1.noarch
libvirt-client-0.9.11.4-3.fc17.x86_64
systemd-44-17.fc17.x86_64

But I have looked into current libvirt git and see the same code there so I 
don't think it is any different with current git, but I have not verified this.

The reason is systemd considers libvirt-guests.service to be stopped when the 
system is running:

$ systemctl status libvirt-guests.service 
libvirt-guests.service - Suspend Active Libvirt Guests
          Loaded: loaded (/usr/lib/systemd/system/libvirt-guests.service; 
enabled)
          Active: deactivating (stop) since Fri, 27 Jul 2012 15:47:31 +0200; 
2min 48s ago
         Process: 1085 ExecStart=/etc/init.d/libvirt-guests start 
(code=exited, status=0/SUCCESS)
         Control: 1150 (libvirt-guests)
          CGroup: name=systemd:/system/libvirt-guests.service
                  └ control
                    ├ 1150 /bin/sh /etc/init.d/libvirt-guests stop
                    └ 2257 sleep 1

libvirt-guests.service is defined as type "simple" in systemd (the default). 
That means systemd will shut down the service when the start executable is 
terminated after starting is done. Systemd will not call stop again on system 
shutdown because it thinks it is already stopped.

The solution is to define it as type "oneshot" and set the flag 
"RemainAfterExit". Then systemd will consider the service as active after 
startup and will call the stop function on host shutdown.

With the attached patch everything works as expected. Please consider merging.

Kind regards,

Gerd
diff -r -u libvirt-0.9.11.4.orig/tools/libvirt-guests.service.in libvirt-0.9.11.4/tools/libvirt-guests.service.in
--- libvirt-0.9.11.4.orig/tools/libvirt-guests.service.in	2012-06-15 20:21:54.000000000 +0200
+++ libvirt-0.9.11.4/tools/libvirt-guests.service.in	2012-07-27 16:05:02.456002214 +0200
@@ -8,6 +8,8 @@
 # out the code
 ExecStart=/etc/init.d/libvirt-guests start
 ExecStop=/etc/init.d/libvirt-guests stop
+Type=oneshot
+RemainAfterExit=yes
 
 [Install]
 WantedBy=multi-user.target

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]