启动时启动VBoxHeadless VM


16

我似乎无法让我的VM在启动时运行。

我没有运气就尝试了“启动应用程序”和update-rc.d。

sudo update-rc.d startvms defaults 99 10

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

这是我的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

我究竟做错了什么?


您是否将Virtual Box升级到PUEL以包括VRDP支持(无头模式所需)?
塔卡特2011年

@Takkat:是的,我应该提到:无头模式对我很有用...我只是无法让它在启动时运行。
capdragon

1
如果您尝试VBoxManage startvm --type headless "UbuntuServer"代替VBoxHeadless命令怎么办?
塔卡特2011年

您可能还需要root才能使其像那样运行su -c 'VBoxHeadless --startvm <MACHINE>'
塔卡特2011年

@Takkat:没有骰子。但是同样,我可以使VBoxHeadless与我使用的命令正常工作。当我在启动脚本中执行此操作时,它仅不起作用。
capdragon

Answers:


27

就是最终成功的方法!

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


2
VRDP不会增加额外的开销,VBoxManage startvm --type headless会更好吗?
mojzis 2012年

3
在我的特定情况下,我希望VM正常关闭而不是保存状态。为此,用“ acpipowerbutton”替换“ savestate”非常有效。
muzzamo

2

仅供参考,这适用于没有nohup的Opensuse。

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

因此,除了省去了nohup之外,我使用了相同的脚本?
capdragon

摆脱了hohup,仍然无法正常工作。我一定做错了其他事。您确定我们使用的是相同的脚本吗?请编辑您的答案并包括您的脚本,以便我可以尝试。
capdragon

2

使用Ubuntu服务器12.04和VirtualBox 4.2.20可以正常工作。

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "$1" in
  start)
    echo "Starting VirtualBox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage startvm SMARTHOST --type headless
    echo "Starting VirtualBox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage startvm wxp-acceso --type headless
    echo "Starting VirtualBox VM wmmaq_edi ..."
    sudo -u $VMUSER VBoxManage startvm vmmaq_edi --type headless
    ;;
  stop)
    echo "Saving state of Virtualbox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage controlvm SMARTHOST savestate
    echo "Saving state of Virtualbox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage controlvm wxp-acceso savestate
    echo "Saving state of Virtualbox VM vmmaq_edi ..."
    sudo -u $VMUSER VBoxManage controlvm vmmaq_edi savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

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

sudo update-rc.d StartVM defaults 99 01

如上一个答案所示。


这对我来说很棒!Vbox 5.0除外,它的sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME,因此startvm有2个“-”,而您只是起诉VBoxHeadless而不是--type headless。另外值得注意的是,虽然我确定我们在服务器上,但末尾没有“&”,但是服务器不会启动以登录提示,但是所有服务都可以正常工作,例如SSH,RDP等,这是我注意到的。它使服务器停留在启动登录的详细信息上!
FreeSoftwareServers 2015年

1

由于您提到如果从终端的命令行键入VBoxHeadless可以正常工作,但是从初始化脚本启动时却不启动任何VM,我猜是它正在寻找运行shell时定义的环境变量在您的终端中,但是在初始化脚本环境中没有定义(除了内核命令行上给出的参数外,该脚本基本上是空的)。

您可以尝试以此替换脚本中的VBoxHeadless调用吗?

env USER=username HOME=/path/to/user/homedir VBoxHeadless ...same options as before...

在这里,应该更改“用户名”和主目录路径,以匹配用于启动VM的用户的名称和主目录路径。

如果这样的作品,您可能需要使用苏-l运行VBoxHeadless,而不是这个的ENV黑客。


+1- su -l这是一个好点!
塔卡特2011年

不,...仍然无法正常工作。我决定只使用Cron作业
capdragon 2011年

1

在最新版本的Virtualbox(4.2.0及更高版本)上,您无需滚动自己的脚本即可自动启动VM,但确实需要进行一些配置。见VirtualBox的手册“章节9.24 启动系统引导过程中的虚拟机

不幸的是,该手册仅给出大纲说明,并且未曾更新过。我在virtualbox论坛上找到了这篇文章,并提供了一些额外的细节。

您可以在rc.local中添加一行以启动服务器,但如果要这样做,请以“正式”方式阅读。

将这些行添加到/ 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并粘贴:

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

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

# adduser Bob vboxusers

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

$ VBoxManage setproperty autostartdbpath /etc/vbox

然后,用户可以使用以下命令将VM设置为自动启动并配置其停止方式(例如savestate,acpishutdown):

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

以上对我来说适用于从virtualbox.org存储库安装的Virtualbox 5。


该死,刚刚完成这个问题,只是发现它已经在这里得到了答案,根据此博客文章
Jules

0

在使用vrdp时,可能还想直接设置端口..注释到最上面的答案,这样可以很好地划分为不同的vm使用不同的脚本

VBoxVRDP -startvm "myVM" -vrdpport 3391 &

0

哇..我看到了所有这些解决方案,看似有点复杂,但这是我最后写的第三本笔记本电脑:

VBoxHeadless -s "Ubuntu Server"

在我的/ etc /目录下的rc.local文件中,效果很好。重启后自动运行虚拟机。

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.