Detect of BHyve VM was powered off or rebooted?

John Baldwin jhb at freebsd.org
Tue Feb 11 19:49:56 UTC 2014


On Sunday, February 09, 2014 7:03:41 pm Neel Natu wrote:
> Hi Craig,
> 
> On Sun, Feb 9, 2014 at 1:11 PM, Craig Rodrigues <rodrigc at freebsd.org> wrote:
> > Hi,
> >
> > I posted some rc.d scripts that I am using to boot a BHyve VM
> > and send the output to a serial console using the /dev/nmdm
> > driver:
> >
> > http://lists.freebsd.org/pipermail/freebsd-virtualization/2014-
January/002040.html
> >
> > It works quite well.  There is some things I would like to improve,
> > and would like some advice on the best way to do it.
> >
> > (1)  If the VM was destroyed with bhyvectl --destroy --vm ${VM_NAME},
> >       then I do not want to automatically restart the VM in the script.
> >       User should manually:  service bhyvevm start
> >
> > (2)  If the VM was powered down, via shutdown -p, or halt -p,
> >        then in my script I do not want to restart the VM in the script.
> >        User should manually:  service bhyvevm start
> >
> > (3)   If the VM was rebooted via "reboot" or "shutdown -r",
> >        then I *do* want the script to restart the VM.
> >
> > I think if I change my start_vm.sh script to do something like:
> >
> >
> >
> > (
> >  while [ -e /dev/vmm/${VM} ]; do
> >     /usr/sbin/bhyve -c 16 -m 8G -A -H -P -g 0 -s 0:0,hostbridge -s 1:0,lpc
> > -s 2:0,virtio-net,${TAP} -s 3:0,virtio-blk,${IMG} -l com1,${CONS_A} ${VM}"
> >  done
> >
> > )  &
> >
> >
> > then this might cover cases (1) and (3), but what will cover
> > case (2)?
> 
> The exit code of the bhyve process will be 0 if it exited because the
> guest rebooted and will be non-zero if the guest did an acpi poweroff.
> You can use that to distinguish between cases (2) and (3).
> 
> Having said that there are error conditions for which bhyve exits with
> a non-zero exit code. So, we'll need to explicitly define an exit code
> to distinguish between an acpi poweroff and these error conditions.

OTOH, in all the cases when bhyve exits with a non-zero exit code, you
will want to exit the loop which would treat it the same as shutdown -p.  I 
think you can just do this:

	while [ -e /dev/vmm/${VM} ]; do
		if ! bhyve ...; then
			break
		fi
	done

-- 
John Baldwin


More information about the freebsd-virtualization mailing list