Ric*_*ick 73 command-line virtualbox vagrant
我使用vagrant进行开发。我忘记关闭一些虚拟机。当我退出主机时,Ubuntu 关闭过程似乎挂起。
有没有办法用一点命令行功能来编写关闭所有流浪盒子的脚本?类似下面的东西,但有些东西,嗯,有效。
for f in $HOME/vagrant;
do;
cd $f
vagrant halt
done;
Run Code Online (Sandbox Code Playgroud)
Tak*_*kat 99
对于 Virtual Box 机器的脚本化控制,我们可以使用VBoxManage命令:
列出正在运行的机器(返回名称和 UUID):
VBoxManage list runningvms
Run Code Online (Sandbox Code Playgroud)通过“休眠”来停止运行虚拟机(建议避免数据丢失)
VBoxManage controlvm <name|uuid> savestate
Run Code Online (Sandbox Code Playgroud)关闭正在运行的虚拟机(不推荐,因为我们可能会丢失来宾中的数据)
VBoxManage controlvm <name|uuid> poweroff
Run Code Online (Sandbox Code Playgroud)在 ACPI-aware 来宾操作系统中使用 ACPI(最好poweroff
用于正常关闭来宾)
VBoxManage controlvm <name|uuid> acpipowerbutton
Run Code Online (Sandbox Code Playgroud)另请参阅:如何使用命令行安全地关闭 VirtualBox 中的客户机操作系统
基于下面这个选择的正确答案,我添加了这个 bash 脚本“ $HOME/bin/stop-vagrant.sh
”。所以现在我有一些东西可以安全地开始停止所有我可能已经打开但在会话中忘记的流浪虚拟机。
vboxmanage list runningvms | sed -r 's/.*\{(.*)\}/\1/' | xargs -L1 -I {} VBoxManage controlvm {} savestate
Run Code Online (Sandbox Code Playgroud)
vboxmanage list runningvms |
-- 获取 VirtualBox 下所有正在运行的虚拟机列表
sed -r 's/.*\{(.*)\}/\1/' |
-- 将字符串剥离为 id 号
xargs -L1 -I {} VBoxManage controlvm {} savestate
-- 在每个打开的盒子上运行保存状态命令。
在 xargs
-L1
- 一次走一条线 -I {}
- 使用 {} 作为下一个命令的占位符Tho*_*one 25
另一个答案非常适合处理 Virtualbox,但 Vagrant 具有自己的处理虚拟机的机制,正如其中一条评论中提到的,它支持的不仅仅是 VirtualBox,目前只支持 VMWare,但谁知道呢!
这似乎对我有用:
vagrant global-status | awk '/running/{print $1}' | xargs -r -d '\n' -n 1 -- vagrant suspend
Run Code Online (Sandbox Code Playgroud)
笔记:
这适用于 1.6 之后的 Vagrant 版本,对于旧版本,您可能应该升级,但如果不能,则专注于 Virtualbox 的其他选项之一可能会更好。
Aqu*_*ion 12
我的机制:
vagrant global-status | grep virtualbox | cut -c 1-9 | while read line; do echo $line; vagrant halt $line; done;
virtualbox
(过滤掉帮助文本,如果您使用其他提供程序,则会中断)vagrant halt $line
停止该全局唯一 ID 的流浪者这比上面的 Virtualbox 方法要好,因为它也会运行任何 vagrant 配置的关闭机制。
小智 6
结合其他一些答案,这将关闭所有正在运行的 virtualbox vagrant box:
vagrant global-status | awk '/virtualbox running/{ print $1 }' | xargs vagrant halt
Run Code Online (Sandbox Code Playgroud)
如果其他人遇到这个问题:对于那些使用 VirtualBox 的人,它已经可以解决这个问题,只需要编辑一个文件:
# Contents of /etc/default/virtualbox
# ...
# ...
# SHUTDOWN_USERS="foo bar"
# check for running VMs of user 'foo' and user 'bar'
# 'all' checks for all active users
# SHUTDOWN=poweroff
# SHUTDOWN=acpibutton
# SHUTDOWN=savestate
# select one of these shutdown methods for running VMs
# acpibutton and savestate causes the init script to wait
# 30 seconds for the VMs to shutdown
## My original values
# SHUTDOWN_USERS=""
# SHUTDOWN=poweroff
## My current values
SHUTDOWN_USERS="all"
SHUTDOWN=savestate
Run Code Online (Sandbox Code Playgroud)
好处是不需要编辑/创建任何注销或init.d
剥离来运行其他答案中发布的命令。缺点是此解决方案特定于 VirtualBox。
在 Ubuntu 14.10 和 VirtualBox 4.3.18 上测试。
所有功劳都归功于这篇文章。
归档时间: |
|
查看次数: |
109592 次 |
最近记录: |