[systemd-devel] SRe: VirtualBox VM as a unit failures

Colin Guthrie gmane at colin.guthr.ie
Thu Sep 1 19:30:02 UTC 2022


Hi,

When you have an ExecStop, it's meant to synchronously stop all 
processes. Anything left once it exits, systemd considers fair game for 
killing!

So chances are, the ExecStop runs and tells the machine the power button 
was pressed. This command exits almost immediately and before the 
machine gets much of a chance to process it, systemd goes on a killing 
spree to tidy up what's left.

So you may need some kind of synchronous version of the stop command 
which waits a bit with it's own timeout. You can likely knock up a 
script in bash pretty easily. Here's a snippet you can adapt from a 
script (non-systemd) I use for managing VMs which would allow you to 
implement a controlled shutdown with a timeout.

There may be other issues at play but this is definitely one of them!!

(other problems may include some processes being are user wide if you 
and used by multiple VMs but will get lumped in the cgroup with the 
first one you start and thus may be killed when it is powered off even 
if other VMs are still running!)

HTHs

Col


VM_NAME="RHEL7"

function isrunning()
{
   VBoxManage list runningvms | grep -q "$VM_NAME" && echo yes || echo no
}
function stop()
{
   if [ "yes" != $(isrunning) ]; then
     echo "Not running"
   else
     VBoxManage controlvm "$VM_NAME" acpipowerbutton
     TIMEOUT=60
     echo -n "Waiting for shutdown"
     while [ "yes" = $(isrunning) ]; do
       echo -n "."
       sleep 1
       if [ 0 -eq $TIMEOUT ]; then
         echo
         echo "Timeout waiting for shutdown :-(" >&2
         echo "Continuing with forced poweroff"
         VBoxManage controlvm "$VM_NAME" poweroff
         TIMEOUT=10
       fi
       TIMEOUT=$(( $TIMEOUT - 1 ))
     done
     echo
   fi
}


Sergio Belkin wrote on 01/09/2022 18:59:
> I,m triying to configure an user-level unit for a VirtualBox VM, but it 
> does not work well, when I stop, it complains:
> 
> systemctl --user status  vbox_vm_start at RHEL7.service
>vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7
>       Loaded: loaded 
> (/home/sergio/.config/systemd/user/vbox_vm_start at .service; enabled; 
> vendor preset: disabled)
>       Active: inactive (dead) since Thu 2022-09-01 14:21:57 -03; 5s ago
>      Process: 378373 ExecStart=/usr/bin/VBoxManage startvm RHEL7 --type 
> headless (code=exited, status=0/SUCCESS)
>      Process: 378581 ExecStop=/usr/bin/VBoxManage controlvm RHEL7 
> acpipowerbutton (code=exited, status=0/SUCCESS)
>        Tasks: 40 (limit: 38236)
>       Memory: 23.6M
>          CPU: 8.114s
>       CGroup: 
> /user.slice/user-1000.slice/user at 1000.service/app.slice/app-vbox_vm_start.slice/vbox_vm_start at RHEL7.service
>               ├─ 378386 /usr/lib/virtualbox/VBoxXPCOMIPCD
>               ├─ 378392 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
>               └─ 378442 /usr/lib/virtualbox/VBoxHeadless --comment RHEL7 
> --startvm f02a9f08-2ff2-4a92-b3cd-a8dfb17513c6 --vrde config
> 
> sep 01 14:21:51 munster.belkin.home systemd[3452]: Starting 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7...
> sep 01 14:21:51 munster.belkin.home VBoxManage[378373]: Waiting for VM 
> "RHEL7" to power on...
> sep 01 14:21:51 munster.belkin.home VBoxManage[378373]: VM "RHEL7" has 
> been successfully started.
> sep 01 14:21:51 munster.belkin.home systemd[3452]: Started 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7.
> sep 01 14:21:56 munster.belkin.home systemd[3452]: Stopping 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7...
> sep 01 14:21:57 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378386 (VBoxXPCOMIPCD) remains 
> running after unit stopped.
> sep 01 14:21:57 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378392 (VBoxSVC) remains 
> running after unit stopped.
> sep 01 14:21:57 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378442 (VBoxHeadless) remains 
> running after unit stopped.
> sep 01 14:21:57 munster.belkin.home systemd[3452]: Stopped 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7.
> sep 01 14:21:57 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Consumed 3.386s CPU time.
> 
> If I try to start, these are the errors:
> 
> × vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7
>       Loaded: loaded 
> (/home/sergio/.config/systemd/user/vbox_vm_start at .service; enabled; 
> vendor preset: disabled)
>       Active: failed (Result: exit-code) since Thu 2022-09-01 14:22:06 
> -03; 7s ago
>      Process: 378730 ExecStart=/usr/bin/VBoxManage startvm RHEL7 --type 
> headless (code=exited, status=1/FAILURE)
>        Tasks: 40 (limit: 38236)
>       Memory: 25.7M
>          CPU: 3.338s
>       CGroup: 
> /user.slice/user-1000.slice/user at 1000.service/app.slice/app-vbox_vm_start.slice/vbox_vm_start at RHEL7.service
>               ├─ 378386 /usr/lib/virtualbox/VBoxXPCOMIPCD
>               ├─ 378392 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
>               └─ 378442 /usr/lib/virtualbox/VBoxHeadless --comment RHEL7 
> --startvm f02a9f08-2ff2-4a92-b3cd-a8dfb17513c6 --vrde config
> 
> sep 01 14:22:06 munster.belkin.home systemd[3452]: Starting 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7...
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: The machine 'RHEL7' is already locked by a session (or being 
> locked or unlocked)
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component 
> MachineWrap, interface IMachine, callee n>
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: Context: "LaunchVMProcess(a->session, sessionType.raw(), 
> ComSafeArrayAsInParam(aBstrEnv), progress.asOutPar>
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Control process exited, code=exited, 
> status=1/FAILURE
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Failed with result 'exit-code'.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378386 (VBoxXPCOMIPCD) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378392 (VBoxSVC) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378442 (VBoxHeadless) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: Failed to start 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7.
> 
> This the unit file:
> × vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7
>       Loaded: loaded 
> (/home/sergio/.config/systemd/user/vbox_vm_start at .service; enabled; 
> vendor preset: disabled)
>       Active: failed (Result: exit-code) since Thu 2022-09-01 14:22:06 
> -03; 7s ago
>      Process: 378730 ExecStart=/usr/bin/VBoxManage startvm RHEL7 --type 
> headless (code=exited, status=1/FAILURE)
>        Tasks: 40 (limit: 38236)
>       Memory: 25.7M
>          CPU: 3.338s
>       CGroup: 
> /user.slice/user-1000.slice/user at 1000.service/app.slice/app-vbox_vm_start.slice/vbox_vm_start at RHEL7.service
>               ├─ 378386 /usr/lib/virtualbox/VBoxXPCOMIPCD
>               ├─ 378392 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
>               └─ 378442 /usr/lib/virtualbox/VBoxHeadless --comment RHEL7 
> --startvm f02a9f08-2ff2-4a92-b3cd-a8dfb17513c6 --vrde config
> 
> sep 01 14:22:06 munster.belkin.home systemd[3452]: Starting 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7...
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: The machine 'RHEL7' is already locked by a session (or being 
> locked or unlocked)
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component 
> MachineWrap, interface IMachine, callee n>
> sep 01 14:22:06 munster.belkin.home VBoxManage[378730]: VBoxManage: 
> error: Context: "LaunchVMProcess(a->session, sessionType.raw(), 
> ComSafeArrayAsInParam(aBstrEnv), progress.asOutPar>
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Control process exited, code=exited, 
> status=1/FAILURE
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Failed with result 'exit-code'.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378386 (VBoxXPCOMIPCD) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378392 (VBoxSVC) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: 
> vbox_vm_start at RHEL7.service: Unit process 378442 (VBoxHeadless) remains 
> running after unit stopped.
> sep 01 14:22:06 munster.belkin.home systemd[3452]: Failed to start 
> vbox_vm_start at RHEL7.service - VirtualBox VM RHEL7.
> 
> This is the unit file:
> [Unit]
> Description=VirtualBox VM %i
> After=network.target vboxdrv.service
> Before=runlevel2.target shutdown.target
> 
> [Service]
> Type=forking
> Restart=no
> TimeoutSec=5min
> IgnoreSIGPIPE=no
> KillMode=process
> GuessMainPID=no
> RemainAfterExit=no
> 
> #ExecStart=/usr/lib/virtualbox/VBoxHeadless --comment RHEL7 --startvm 
> f02a9f08-2ff2-4a92-b3cd-a8dfb17513c6 --vrde config
> ExecStart=/usr/bin/VBoxManage startvm %i --type headless
> ExecStop=/usr/bin/VBoxManage controlvm %i acpipowerbutton
> 
> [Install]
> WantedBy=default.target
> 
> (End of file)
> 
> What is the proper way to configure this kind of unit?
> 
> Thanks in advance
> 
> 
> 
> -- 
> --
> Sergio Belkin
> LPIC-2 Certified - http://www.lpi.org <http://www.lpi.org>


-- 

Colin Guthrie
gmane(at)colin.guthr.ie
http://colin.guthr.ie/

Day Job:
   Tribalogic Limited http://www.tribalogic.net/
Open Source:
   Mageia Contributor http://www.mageia.org/
   PulseAudio Hacker http://www.pulseaudio.org/
   Trac Hacker http://trac.edgewall.org/



More information about the systemd-devel mailing list