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

Ulrich Windl Ulrich.Windl at rz.uni-regensburg.de
Fri Sep 2 08:12:46 UTC 2022


Hi!

The other thing that came to my mind was the ASCI power button: The system
might actually block or ignore it (or asking for the admin password). So I
think it would be a good idea to have a "second line of defense" causing a hard
stop (power off) if the first method fails within a reasonable timeout.
That's how cluster VM resources are managed, typically.

Regards,
Ulrich

>>> Colin Guthrie <gmane at colin.guthr.ie> schrieb am 01.09.2022 um 21:30 in
Nachricht <ter17r$16vf$1 at ciao.gmane.io>:
> 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.sli
> ce/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.sli
> ce/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.sli
> ce/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