关机/重启前执行命令

关机/重启前执行命令

我有一台机器运行着几个 vagrant VM。我遇到的问题是,有时我会在关闭或重启机器之前忘记关闭这些 VM。因此,我的机器会卡住并显示以下消息:waiting for vboxnet0 to become free

我搜索了解决方案并找到了此页面:

http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown

我尝试了他们关机的方法,但是没有用。

我为该命令编写了一个 sh 文件:

#!/bin/bash

cd ~/workspace/git/mediaservice
vagrant halt

有什么建议么?

答案1

要在关机或重启时执行脚本:

  1. 将您的脚本保存在 /etc/rc6.d 中
  2. 使其可执行:sudo chmod +x K99_script

笔记:

  • rc6.d 中的脚本不能带有 .sh 扩展名
  • 您的脚本名称必须以 K99 开头才能在正确的时间运行。
  • 该目录中的脚本按字母顺序执行。

来源

答案2

  1. 在 /etc/init.d/ 目录中使用您的脚本创建一个 shell 可执行文件。

  2. 由于这必须在关机或重启期间执行,因此需要在 /etc/rc0.d/ 和 /etc/rc6.d 中创建软链接

例子:

sudo ln -s /etc/init.d/<your_file> /etc/rc0.d/k99stop_vm
sudo ln -s /etc/init.d/<your_file> /etc/rc6.d/k99stop_vm
sudo chmod a+x /etc/init.d/<your_file>

答案3

如果你的 vagrant VM 使用的是 VirtualBox,你可以修改/etc/default/virtualbox并更改以下行:

SHUTDOWN_USERS=""

SHUTDOWN_USERS="all"

这帮我在 Ubuntu 14.04 上修复了这个问题。

答案4

您可以在这里找到解决方案:在系统关闭/启动时暂停/恢复所有 Vagrant 框

有一个简单的初始化脚本,可以在关闭之前暂停所有正在运行的机器。

安装

编辑/etc/init.d/vagrant-boxes并粘贴上述文章中的脚本并保存。或者从这里下载并将其保存到/etc/init.d/vagrant-boxes。在 debian/ubuntu 等上,运行

# update-rc.d vagrant-boxes defaults 99 01

数字 99 是序列号,应该大于(在我的 Virtualbox 中是数字 20,顺便说一下,这是 Debian 发行版的默认数字)。第二个数字是关闭计算机时的序列。所以,最好先这样做。

相关内容