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