[systemd-devel] Antw: Antw: [EXT] SRe: VirtualBox VM as a unit failures
Ulrich Windl
Ulrich.Windl at rz.uni-regensburg.de
Fri Sep 2 09:08:42 UTC 2022
>>> "Ulrich Windl" <Ulrich.Windl at rz.uni-regensburg.de> schrieb am 02.09.2022
um
10:12 in Nachricht <6311BAFE020000A10004D56E at gwsmtp.uni-regensburg.de>:
> Hi!
>
> The other thing that came to my mind was the ASCI power button: The system
Time for the week-end: s/ASCI/ACPI/
> 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.sl
> i
>> 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.sl
> i
>> 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.sl
> i
>> 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