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 <[email protected]> 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 > > Signed-off-by: Antonio Terceiro <[email protected]> > --- > 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 :|
