Detect of BHyve VM was powered off or rebooted?
Craig Rodrigues
rodrigc at FreeBSD.org
Tue Feb 11 22:29:21 UTC 2014
On Tue, Feb 11, 2014 at 11:11 AM, John Baldwin <jhb at freebsd.org> wrote:
> 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
>
One question, if "bhyve" exits, do I have to call bhyveload again before
calling bhyve?
The /usr/share/examples/bhyve/vmrun.sh has a loop which does:
while [ 1 ] ; do
...
bhyvectl --destroy
bhyveload
bhyve
...
done
--
Craig
More information about the freebsd-virtualization
mailing list