当前位置: 首页>>技术教程>>正文


virtualbox – 启动时启动 VBoxHeadless VM

,

问题描述

我似乎无法让我的虚拟机在启动时运行。

我尝试了 “startup applications” 和 update-rc.d,但没有成功。

sudo update-rc.d startvms defaults 99 10

这为不同的运行级别创建了所有适当的符号链接,但虚拟机仍然无法启动。

这是我的 startvms 脚本:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          startvms
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start my VMs at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case "$1" in
  start)
        echo "Starting"
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  stop)
        echo "Stopping $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

我究竟做错了什么?

最佳思路

THIS 终于起作用了!

1)创建启动脚本文件

在 /etc/init.d-sudo nano /etc/init.d/StartVM 中。

将以下内容复制粘贴到文件中,并将“我的虚拟机名称”替换为您的虚拟机名称:

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

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

2)赋予脚本可执行权限

sudo chmod +x /etc/init.d/StartVM

3)告诉脚本在启动时运行。

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

sudo update-rc.d StartVM defaults 99 01

次佳思路

仅供参考,这可以在没有 nohup 的 Opensuse 上运行。

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

第三种思路

在较新版本的 Virtualbox(4.2.0 及以上版本)中,您无需编写自己的脚本来自动启动虚拟机,但需要进行一些配置。请参阅 Virtualbox 手册“ Starting virtual machines during system boot ”第 9.24 节

不幸的是,手册只提供了概要说明,而且很久没有更新了。我发现 this post on the virtualbox forums 提供了一些额外的详细信息。

您只需在 rc.local 中输入一行即可启动您的服务器,但如果您想以 “offical” 方式执行此操作,请继续阅读..

将以下行添加到 /etc/default/virtualbox:

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vboxautostart.cfg

编辑 /etc/vbox/vboxautostart.cfg(此示例拒绝除用户 “Bob” 之外的所有用户的自动启动权限:

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

将 vboxusers 组添加到 /etc/vbox 和 sticky bit:

# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox

将所有将使用 virtualbox 的用户添加到 “vboxusers” 组,例如:

# adduser Bob vboxusers

每个想要为单个机器启用自动启动的用户都必须使用以下命令设置自动启动数据库目录的路径:

$ VBoxManage setproperty autostartdbpath /etc/vbox

然后,用户可以将虚拟机设置为自动启动,并配置如何停止(例如 savestate、acpishutdown):

$ VBoxManage modifyvm <vmname> --autostart-enabled on
$ VBoxManage modifyvm <vmname> --autostop-type acpishutdown

上述操作对我而言适用于从 virtualbox.org 存储库安装的 Virtualbox 5。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14581.html,未经允许,请勿转载。