用于virtualbox VM的init.d控制脚本


2

我有一台Ubuntu服务器,始终需要在其上运行Virtualbox虚拟机。VM由VMAdmin没有管理员特权的特定用户管理。我需要创建一个init.d脚本来处理我的virtualbox虚拟机。
这应该:

  • 主机系统启动时启动VM;
  • 每当主机关闭时,保存来宾系统的状态;
  • 提供用于启动,关闭,重置和备份VM的命令。

Answers:


8

以下脚本可解决上述所有问题:

#! /bin/sh
# /etc/init.d/vbox

#Edit these variables!
VMUSER=VMAdmin
VMNAME="cdb62186-7c30-4c25-a0b0-e4a32cfb0504"
BASEFOLDER=/home/VMAdmin/path/to/backups/

case "$1" in
    start)
        echo "Starting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        ;;
    reset)
        echo "Resetting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
        ;;
    stop)
        echo "Saving state of Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
        ;;
    shutdown)
        echo "Shutting down Virtualbox VM..."
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
        ;;
    status)
        sudo -H -u $VMUSER VBoxManage list vms -l | grep -e ^"$VMNAME": -e ^State | sed s/\ \ //g | cut -d: -f2-
        ;;
    backup)
        echo ""
        sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton

        echo "Waiting for VM "$VMNAME" to poweroff..."
        until $(sudo -H -u $VMUSER VBoxManage showvminfo --machinereadable "$VMNAME" | grep -q ^VMState=.poweroff.)
        do
          sleep 1
        done

        FILENAME=$(date +"%Y_%m_%d-%T")
        echo "Backing up Virtualbox VM to '$BASEFOLDER$FILENAME'..."
        sudo -H -u $VMUSER VBoxManage clonevm "$VMNAME" --options keepallmacs --name $FILENAME --basefolder $BASEFOLDER

        echo "Restarting VirtualBox VM..."
        sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
        echo ""
        ;;
    *)
        echo "Usage: sudo service vbox {start|stop|status|shutdown|reset|backup}"
        exit 1
        ;;
esac

exit 0

告诉脚本第一个关闭并最后一个启动:

sudo update-rc.d vbox defaults 99 01

要将备份任务添加到crontab,请运行:

sudo crontab -e

并添加如下一行:

* 3 * * 5 service vbox backup

它将在星期五的凌晨3点运行每周备份。有关创建crontab任务的更多信息,请参见:http : //www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

相关问题:Bash脚本等待Virtualbox VM关闭?


我喜欢它!但是,它看起来并不像暴发户脚本;-)
Andrew

感谢您的脚本。您能适应它以将virtualbox的名称作为参数吗?
skonsoft

1
@skonsoft:您可能会替换为$VMNAME$2并使用来启动服务sudo service vbox start VMNAME。我不确定是否建议甚至禁止使用这种用法。
伊曼纽尔·伊(Emanuel Ey),2015年

是的,我做到了,而且有效。像这样的命令:sudo service vbox VMNAME start。我要求您这样做是因为我想和您一起使用另一个脚本,该脚本使用您的脚本启动所有已配置的VM(只需调用您的脚本即可),并且效果很好
skonsoft

1
@skonsoft我想看那个脚本。请添加为该问题的另一个答案,或将其发布为带有答案的独立问题,并共享链接。另外,请记住要赞扬它,这个问题对您有用;)
Emanuel Ey 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.