出现错误时,VirtualBox startvm 命令总是返回退出代码 0
Posted
技术标签:
【中文标题】出现错误时,VirtualBox startvm 命令总是返回退出代码 0【英文标题】:VirtualBox startvm command always return a exit code 0 when there's an error 【发布时间】:2014-03-21 22:31:20 【问题描述】:我有一个简单的批处理文件来部署 VM 映像(.ova 文件),然后将其导入 VirtualBox 并启动它。
这是脚本的最后几行:
call "%vboxmanage_exe%" import "%dest_path%\%latest_vm_filename%" --vsys 0 --vmname %vm_name%
IF %ERRORLEVEL% neq 0 (
ECHO VM import failed!
EXIT /b 1
)
call "%vboxmanage_exe%" startvm "%vm_name%" --type headless
IF %ERRORLEVEL% neq 0 (
ECHO VM start failed!
EXIT /b 1
)
启动命令实际上是这样的:
VBoxManage.exe startvm "D:\Vms\Latest.ova" --type headless
当已经有一个具有我在命令中指定的名称的 VM 时,会出现错误并且我的脚本会捕获它(回显和退出都执行)。
但是,如果导入成功并尝试启动它,但失败了,则错误不会被捕获并继续... startvm 命令总是返回等于 0 的退出代码?
这是我在尝试启动 VM 时遇到的错误(引入以测试机制)。
VBoxManage.exe: error: Nonexistent host networking interface, name 'Broadcom NetXtreme 57xx Gigabit Controller' (VERR_INTERNAL_ERROR)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component Console, interface IConsole
我如何知道启动是否失败,并以适当的错误代码从我的批处理文件中退出。我想我可以检查 VM 状态以查看它是否正在运行(尚未研究这种可能性),但我不希望这样做并从 startvm 命令中获取实际错误。
编辑:我发现唯一相似的是:batch: Exit code for "rd" is 0 on error as well
我尝试了建议的解决方案,但对我不起作用。
【问题讨论】:
这并不能回答你的问题,因为我不认为这是你的问题,但这是一个相关的鲜为人知的事情,应该更广为人知:ERRORLEVEL is not %ERRORLEVEL% 【参考方案1】:鉴于额外的信息,试试这个:
call "%vboxmanage_exe%" startvm "%vm_name%" --type headless 2>&1 |find "error:" >nul && exit /b 1
假设您提供的错误消息在控制台上,而不是在日志文件中,这需要不同的方法。
【讨论】:
是的,它确实有效。谢谢!但是,有没有办法稍微修改它以在控制台中显示错误?重定向到 find 命令使其不再显示。 (我在查找和退出之间添加了“&& echo VM start failed!”)。 您可以删除>nul
,它将打印包含error:
的行以上是关于出现错误时,VirtualBox startvm 命令总是返回退出代码 0的主要内容,如果未能解决你的问题,请参考以下文章
Docker和K8s实战——安装Centos7时发生VirtualBox运行虚拟电脑时发生严重错误
Docker和K8s实战——安装Centos7时发生VirtualBox运行虚拟电脑时发生严重错误