On Mon, Jan 05, 2026 at 04:57:02PM +0000, Daniel P. Berrangé via Devel wrote:
On Mon, Dec 22, 2025 at 02:46:33PM -0300, Antonio Terceiro wrote:
Type=oneshot means that the service is only considered started after the main process exits. In setups where libvirt-guests is configured to be used and imposes a delay on the startup of guests, this will cause systemd to report a quite high boot time as it will wait until all guests have booted, plus all the delay between them. High boot times are often reported as issues in monitoring systems, and require operator attention, while in this case there is not really an issue with the system, it's just doing what it was configured to do.
With Type=exec, the service is considered started right after the main process is *started*, but the boot process will not wait for it.
Having other units depend on libvirt-guests.service finishing was already not reliable because one cannot know how long the OS inside each guest takes to boot, and libvirt-guests already does not wait for them to be in any particular state.
The dependencies on libvirt-guest.service don't neccessarily need to care about what the guest OS is doing, they might merely want to delay interaction with libvirt until all guests have been auto-started. eg so they don't try to start other guests while auto-start is still running. So there's still a possibility of regression in behaviour in this regard.
On the other hand, we recently introduced built-in support for autostart in the virtqemud/libvirtd daemons which is intended to obsolete use of the libvirt-guests.service script. The built-in support has closer conceptual behaviour in that it runs asynchronously once systemd has started virtqemud, so no other system service can co-ordinate against autostart directly.
We originally added Type=oneshot in
commit 79ca7e4e5763795b041e95738c73d4e64bf1024b Author: Gerd v. Egidy <gerd@egidy.de> Date: Fri Jul 27 17:01:04 2012 +0200
libvirt-guests: systemd host shutdown does not work
but looking at that commit, AFAICT, it was the RemainAfterExit=yes line that was the actual fix. That is valid to use with Type=exec too, so we didn't need the change to 'oneshot' IIUC
Anyway Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> and I've merged this fix.
Signed-off-by: Antonio Terceiro <terceiro@debian.org> --- tools/libvirt-guests.service.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in index b044444298..c8e4d3d749 100644 --- a/tools/libvirt-guests.service.in +++ b/tools/libvirt-guests.service.in @@ -19,7 +19,7 @@ EnvironmentFile=-@initconfdir@/libvirt-guests # out the code ExecStart=@libexecdir@/libvirt-guests.sh start ExecStop=@libexecdir@/libvirt-guests.sh stop -Type=oneshot +Type=exec RemainAfterExit=yes StandardOutput=journal+console TimeoutStopSec=0 -- 2.51.0
With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|