如何让 Debian 在关机/重启期间等待所有 VirtualBox 客户机停止?

如何让 Debian 在关机/重启期间等待所有 VirtualBox 客户机停止?

我正在使用vboxautostart-service在系统启动时启动我的所有虚拟机(Debian 7),它们已使用此命令进行配置: VBoxManage modifyvm '<vm-name>' --autostart-enabled on --autostop-type savestate

我也可以通过执行手动停止它们service vboxautostart-service stop,这需要大约 10 秒钟来保存所有虚拟机的状态。

但是,如果我重新启动主机(ctrl+alt+del 或执行reboot),它不会等待虚拟机保存其状态,下次启动时,它们都具有状态Aborted。我尝试vboxautostart-service通过添加来修改sleep 15,但没有效果。这些进程似乎被终止了,我想是因为它们退出得不够快。

有人知道如何解决这个问题吗?

答案1

长话短说...您需要编写自己的 init.d 脚本以在运行级别 0(停止)和/或 6(重新启动)以及运行级别 1(单用户模式,通常用于恢复情况)上运行。

例如,在 /etc/init.d/virtualbox 中创建如下内容:

/bin/sh #!/bin/sh 复制代码

### 开始初始化信息
# 提供:virtualbox_start_and_stop
# 必需启动:$local_fs $network
# 必需停止:$local_fs
# 默认开始: 2 3 4 5
# 默认停止: 0 1 6
# 简短的介绍:
# 描述:在启动时启动 virtualbox,并在关机/重启时安全关闭。
### 结束初始化信息

案例“$1”
  开始)
    echo“启动 Virtualbox”

    # 尽一切努力启动或恢复您的虚拟盒实例。
    # 也许在某个地方寻找需要重新启动或恢复的虚拟机的 txt 文件...然后启动它们。
    ;;
  停止)
    echo“停止 Virtualbox”

    # 采取一些措施来关闭或者保存你的虚拟盒实例。
    # 也许还可以将需要恢复的实例保存到某个 txt 文件中,以供上述启动方法使用。

    ;;
  *)
    echo "用法:/etc/init.d/virtualbox {start|stop}"
    出口 1
    ;;
埃萨克

出口 0

确保它是可执行的(chmod +x /etc/init.d/virtualbox),然后运行update-rc.d virtualbox defaults以在正确的位置创建所有适当的符号链接,以正确启动/停止。

相关内容