我的Ubuntu12.04中有很多虚拟机,每次我关闭或重新启动时,都必须一个一个地启动它们。
我想帮助编写脚本以在启动时自动自动启动VBox计算机。
我的Ubuntu12.04中有很多虚拟机,每次我关闭或重新启动时,都必须一个一个地启动它们。
我想帮助编写脚本以在启动时自动自动启动VBox计算机。
Answers:
您可以使用VirtualBox自动启动服务。在“ Geek Admin的生活”博客上发布了一个很好的教程,介绍了如何执行此操作。
以下步骤摘自链接的博客文章:
首先,您需要创建文件/etc/default/virtualbox
并添加一些变量。
VBOXAUTOSTART_DB包含自动启动数据库目录的绝对路径,而
VBOXAUTOSTART_CONFIG包含自动启动配置设置的位置。该文件应类似于以下内容:
# virtualbox defaults file
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
现在我们需要创建/etc/vbox/vbox.cfg
文件并添加
# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Create an entry for each user allowed to run autostart
myuserid = {
allow = true
}
注意:如果文件名vbox.cfg
在上面不起作用,请尝试将其命名autostart.cfg
。
如果您是唯一的用户,则可以将行添加default_policy = allow
到vbox.cfg
文件中。
将目录权限设置为vboxuser组,并确保用户可以写入目录以及粘性位。
sudo chgrp vboxusers /etc/vbox
sudo chmod 1775 /etc/vbox
将每个用户添加到vboxusers
组。
sudo usermod -a -G vboxusers USERNAME
(USERNAME
用用户名代替)
注意:如果您更改了当前用户的组权限,请注销并再次登录以刷新权限。(积分@ kR105)
每个要为单个计算机启用自动启动的用户都必须使用以下命令设置自动启动数据库目录的路径:
VBoxManage setproperty autostartdbpath /etc/vbox
并为单个VM启用自动启动
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
这将myuserid.start
在/etc/vbox
目录中创建一个文件
现在,重新启动vboxautostart-service以读取更改。
sudo service vboxautostart-service restart
重新启动系统,您的VM应该启动
在香草LTS上尝试进行此操作时,我遇到了类似的不幸事件。
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
在此版本上,未安装密钥文件/etc/init.d/vboxautostart-service。
据我所知,所有的VitualBox和要求都是由apt-get放入的,所以我不能说为什么也没有提供'vboxautostart-service'文件。但是要克服这一点,这是我对kdmurray帖子的更新。
1)/ etc / default / virtualbox 文件对我来说已经存在。因此必须添加vars:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2)必须按照OP的指示创建/etc/vbox/autostart.cfg。
6b)需要获取一个vboxautostart-service脚本并使它可执行。
cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service
6c)提醒rc.d控制器,但我使用24作为开始时间。只放20个就没有启动。也许甚至在virtualbox工作之前就已经运行了。
sudo update-rc.d vboxautostart-service defaults 24 24
然后重新启动可以正确启动虚拟机。
vboxdrv
在# Required Start
/ # Required Stop
行中替换为virtualbox
。看来他们重命名了服务,因此OS无法正确检测启动/停止优先级。我认为,如果您替换了这些行,则不需要步骤6c。
您可以使用vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(其中之一)。如果它们是您通过使用gui以外的其他方式连接的服务器,请使用“无头”。
要在引导期间的正确时间实际运行这些命令,您需要在Upstart上阅读。
多不愉快的小时试图让程序后从kdmurray上述工作,都没有成功我最终发现根本工作方法。
首先,我的Linux主机(Mint 17)是在引导时设置的,以自动登录到我的主帐户。
其次,我使用VirtualBox GUI(v4.3.12)中的功能为桌面上的每个虚拟机创建了一个快捷方式。{右键单击左栏中的VM,然后选择“在桌面上创建快捷方式”}
下一步:我已经发现打开菜单->控制中心->启动应用程序->添加并添加桌面快捷方式会导致文件不起作用,我从此页面上的其他答案中发现,启动位置为/ home /USERNAME/.config/autostart,所以我右键单击了每个桌面VM快捷方式,然后将它们粘贴到该文件夹中,覆盖了早期的废话文件。现在,他们开发了“漂亮的” VirtualBox图标。
并且在重新启动主机时足够确定,这3个VM会自动启动。
:-)
比尔·威廉姆斯
PS:遗憾的是,我仍然缺少一些东西,因为虚拟机通常不会在启动时启动,而是会生成一个错误对话框,指出它们已被锁定,即使我告诉它们在重新启动主机之前也要关闭它们。
我在运行VBox 5.1.34的Ubuntu 16.04下找到了一种更简单的方法。
在VBox中时,右键单击列表中正在运行或处于空闲状态的VM,然后选择“在桌面上创建快捷方式”。在桌面上看到该图标后,请使用任何工具打开该工具,以查看VBox创建的基础命令(在我的系统,我右键单击并选择“属性”)将此复制到剪贴板。
打开程序以更新“启动应用程序”,并创建一个在启动时启动的新应用程序,粘贴从VirtualBox创建的桌面链接复制的命令。
要在登录我们的会话时启动虚拟机,我们可能需要定义一个.desktop文件:
当此文件被复制或移动到我们的自动启动目录时,它将在我们登录后执行:
在用户空间中运行Virtual Box可能有助于避免在引导过程中启动它们的有害副作用(例如,VM以root身份运行,引导时间大大增加,...)。
这可以使用VirtualBox命令行管理界面来完成。只需在启动时运行以下脚本。
#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")
case "$1" in
start)
echo "===Starting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
;;
stop)
echo "===Saving state of Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
sleep 20
;;
shutdown)
echo "===Shutting down Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
sleep 20
;;
reset)
echo "===Resetting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
;;
status)
echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
;;
echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
exit 1
;;
esac
exit 0
有一个不错的教程以获取更多信息。
@kdmurray答案的附件。
如果出现以下错误:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
为了解决这个问题,我必须手动创建文件“ username” .start和“ username” .stop,方法是:
sudo touch "username".start
sudo touch "username".stop
并更改所有者:
sudo chown "username" "username".start
sudo chown "username" "username".stop
重新运行:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
然后重新启动服务:
sudo service vboxautostart-service stop
sudo service vboxautostart-service start
检查是否可以:
top
如果虚拟机正在运行,则您应该在列表中看到“ VBox ...”进程
您还可以获取此处描述的gnome会话管理器。Gnome Session Manager
在软件中心内,或者您可以去终端输入
sudo apt-get install gnome-session-common
接下来,您可以创建一个小脚本来运行,并使用gnome会话管理器启动它。这是一个小示例脚本,助您一臂之力...
#!/bin/sh
#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...
vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
对于Ubuntu服务器16.04.1 LTS,我通过执行以下操作解决了此问题:
sudo systemctl enable rc-local.service
/etc/rc.local
su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"
请注意,virtual_box_user是可以看到虚拟机(您愿意启动)执行命令的虚拟机:
VBoxManage list vms
例:
$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28}
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}
修改后的/etc/rc.local
外观应如下所示
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su bob -c "VBoxManage startvm 'virtualbox1' --type headless &"
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &"
exit 0
如果您没有选择合适的virtualbox所有者,则应该在键入命令时看到错误:
sudo systemctl status rc-local.service
我希望这可以帮助
1-创建一个文件:
nano /etc/init.d/vm-start
粘贴此:
#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless"
/bin/sleep 1
2-使文件vm-start可执行:
chmod +x /etc/init.d/vm-start
3-编辑rc.local
nano /etc/rc.local
添加:
#!/bin/bash
/etc/init.d/vm-start
exit 0
4-重新启动。