[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