jst*_*rek 53 virtual-machine virtualbox services
我需要运行一个软件系统,该系统旨在作为设备安装在专用机器上。为了节省能源,我计划在 VirtualBox VM 上运行系统。
主机是一个带有 SysV-Init 系统的标准 Linux 机器,来宾是一个经过大量修改的 Linux,我不想进一步修改它。VirtualBox 用于 OSE 版本。
我已经想出了如何在主机启动时启动 VM(编辑:这是通过命令完成的,正如 Nikhil 在下面提到的,通过命令VBoxManager startvm),但是我怎样才能正常关闭 VM?在主机上运行的任何脚本都需要等到来宾完全关闭。
任何人都可以建议如何,例如,执行此操作的服务文件必须看起来如何?
小智 34
你有没有尝试过acpipowerbutton这个命令集?
VBoxManage controlvm <uuid>|<name>
pause|resume|reset|poweroff|savestate|
acpipowerbutton|acpisleepbutton|
Run Code Online (Sandbox Code Playgroud)
阅读评论后编辑:
您可以使用acpid或 其他 acpi 实用程序使其优雅。另外,您能否提供有关目前如何关闭机器的更多信息?
平原shutdown不会等待未完成的工作,时间延迟可能太长了。
我假设您没有使用窗口管理器,所以试试这个工具。
刚看到这个守护进程。你可能会发现它很有用。
Aar*_*own 16
与其自己编写代码,不如考虑使用Vagrant,它是为实例化和控制 virtualbox 实例而构建的。文档非常好,我建议您检查一下,而不是尝试自己动手。
总而言之,您创建一个简单的控制文件,然后运行vagrant up以启动任意数量的VirtualBox 实例。您可以使用vagrant ssh登录到主机和vagrant halt关闭主机(不终止)。 vagrant destroy将摆脱实例。
它支持使用 puppet、Ansible 或 Chef 进行配置,并允许您控制大部分公开的 VBox 配置设置。
Grz*_*cki 12
我和你有类似的应用程序,有一个区别:我需要重新启动系统并从快照中恢复。
您感兴趣的是headless-mode。
我有一些这样的服务,所以我使用以下脚本:
VBox_StopRestoreStart.sh
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 VMNAME_or_UUID"
exit 1
fi
set -x
VBoxManage controlvm "$1" poweroff #enforce turnoff
VBoxManage snapshot "$1" restorecurrent #retore state
VBoxManage showvminfo "$1" | grep State #display state to ensure
VBoxHeadless -s "$1" #run in headless mode in background
Run Code Online (Sandbox Code Playgroud)
如何优雅地关闭虚拟机?
如果您想正常关闭 VM,您有两种选择,具体取决于您的应用程序:
VBoxManage controlvm <uuid>|<VMname> acpipowerbuttonVBoxManage controlvm <uuid>|<VMname> acpisleepbuttonVBoxManage controlvm <uuid>|<VMname> savestate提示:您可能会觉得有用:
VBoxManage list vms - 可用虚拟机列表rdesktop IP-ADDR:3389或rdesktop-vrdp IP-ADDR:3389- 当您在无头模式下运行时想要GUI(甚至远程)时:VBoxHeadless -s <uuid>|<VMname>VBoxManage startvm - 从 GUI 开始进行本地调试相关 VirtualBox 手册的章节:第 7 章远程虚拟机 - 分步:在无头服务器上创建虚拟机
PS 如果您对已实现的全功能解决方案感兴趣,OpenStack似乎是一个有趣的选择。
Nik*_*ley 10
在http://www.virtualbox.org/manual/ch08.html查看 VirtualBox VM 管理文档
要列出 VM,请使用命令 VBoxManage list vms
要启动虚拟机,请使用命令 VBoxManage startvm
http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm
要控制 VM,请使用 VBoxManage controlvm
该controlvm子命令允许您更改当前正在运行的虚拟机的状态。可以指定以下内容:
VBoxManage controlvm <vm> pause暂时搁置虚拟机,不永久更改其状态。VM 窗口将被绘制为灰色以指示 VM 当前已暂停。(这相当于在 GUI 的“机器”菜单中选择“暂停”项。)
使用VBoxManage controlvm <vm> resume到撤销之前的暂停指令。(这相当于在 GUI 的“Machine”菜单中选择“Resume”项。)
VBoxManage controlvm <vm> reset在虚拟机上的效果与在真实计算机上按下“重置”按钮的效果相同:虚拟机的冷重启,这将立即重新启动并再次启动来宾操作系统。虚拟机的状态没有事先保存,可能会丢失数据。(这相当于在 GUI 的“Machine”菜单中选择“Reset”项。)
VBoxManage controlvm <vm> poweroff在虚拟机上的效果与在真实计算机上拔电源线的效果相同。同样,VM的状态没有事先保存,数据可能会丢失。(这相当于在GUI的“机器”菜单中选择“关闭”项或按窗口的关闭按钮,然后在对话框中选择“关闭机器”。)
在此之后,VM 的状态将是“Powered off”。
小智 5
对于基于 systemd 的系统,您可以试试这个。
[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service
[Service]
User=user
Group=vboxusers
ExecStart=/usr/bin/VBoxHeadless -s %i
ExecStop=/usr/bin/VBoxManage controlvm %i savestate
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
$ sudo systemctl enable vboxvmservice@vm_name.service
Run Code Online (Sandbox Code Playgroud)