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 :|

Reply via email to