关机/重启前执行命令

SER*_*PRO 24 reboot shutdown execute-command

我有一台运行几个 vagrant 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
Run Code Online (Sandbox Code Playgroud)

有什么建议?

May*_*hux 26

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

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

笔记:

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

来源

  • 我在 /etc/rc6.d 中放置了一个脚本,但它没有在关机时运行。我把它放在 /etc/rc0.d 中,它确实在关机时运行。可能,rc.6 仅用于重启。 (5认同)
  • @Erel Segal-Halevi 我只是尝试将 K99 脚本添加到 /etc/rc6.d 并且它没有执行。查看其他脚本,有一行 **bold K10reboot -> ../init.d/reboot **code ,所以看起来 K99 脚本永远不会被执行!! (3认同)

小智 13

  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>
Run Code Online (Sandbox Code Playgroud)


小智 13

如果您的 vagrant VM 正在使用 VirtualBox,您可以修改/etc/default/virtualbox和更改以下行:

SHUTDOWN_USERS=""
Run Code Online (Sandbox Code Playgroud)

SHUTDOWN_USERS="all"
Run Code Online (Sandbox Code Playgroud)

这在 Ubuntu 14.04 上为我修复了它。


Ant*_*ige 5

为Ubuntu 14.10,你喜欢的东西RC04RC99

从头开始做什么

  1. 在以下位置创建脚本 /etc/init.d/scriptName
    • 确保#!/bin/bash位于脚本的顶部,以便 Linux 知道这是一个 Bash 脚本
    • 确保您运行以使脚本可执行chmod +x /etc/init.d/scriptName
  2. 制作符号链接: ln -s /etc/init.d/scriptName /etc/rc6.d/K04scriptName

我经历的步骤

  1. 我尝试使用Ubuntu失败 - 在启动和关闭时执行脚本
  2. 用 rc0.d (rc6.d, rc.d)找到了Ubuntu 14.10 关机脚本
  3. 我从/etc/rc6.d/RC99linkName改为/etc/rc6.d/RC04linkName并且它有效