在启动时启动 VirtualBox Headless VM

在启动时启动 VirtualBox Headless VM

我在 Ubuntu 12.04 主机上运行了两个 VirtualBox 无头虚拟机。我希望这些虚拟机在系统启动时自动启动。

我有两个像这样设置的 crontab 条目(在拥有虚拟机的用户下):

@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx

但似乎这不管用。如果我直接从终端运行命令,机器会顺利启动,但系统启动后我似乎无法让它们启动。我想也许 crontab 在 VirtualBox 程序/库加载之前就运行了。

我如何自动启动这些虚拟机?

答案1

这是我使用的。它在启动时启动虚拟机,并在关机/重启时保存其状态

#!/bin/bash
### BEGIN INIT INFO
# Provides:       vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO

VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')

case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
    $SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
    echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0

只需将其保存在 /etc/init.d 中。我将它命名为 vbox。运行它update-rc.d <script name> defaults,一切就绪。

答案2

我怀疑您在手动启动虚拟机时使用非 root 帐户登录,而虚拟机cron以 root 身份运行,因此不知道您的虚拟机。您可以通过运行以下命令进行检查

sudo /usr/bin/vboxheadless -startvm io

如果出现错误

Invalid machine name or UUID!

VM 未使用 root 帐户注册。在这种情况下,创建一个 shell 脚本以在您的帐户下运行命令,并使用以下命令安排该脚本cron

#!/bin/sh

USERNAME=...

su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME

答案3

如果您的 MB/CPU 支持硬件可视化,那么 ProxMox 也是一个辅助选项。它是 Linux、KVM 和 Web 界面的独立安装。它比 virtualbox 性能好得多,因为它在内核级别运行,并且与 virtualbox 使用的“虚拟”驱动器不同,您实际上可以将 KVM 下的客户机连接到使用更少磁盘 Io 的物理驱动器。

快速检查您的系统是否支持硬件可视化:

egrep -c '(vmx|svm)' /proc/cpuinfo

相关内容