重启和 init 6 一样吗?

cwd*_*cwd 22 reboot init

重启与 ubuntu 的 init 6 相同吗?

我在 Amazon EC2 上运行 Ubuntu 12.04。当 ssh 进入框中时,我可以输入runlevel并得到:

N 2
Run Code Online (Sandbox Code Playgroud)

看着man reboot我看到:

当使用 --force 或运行级别 0 或 6 调用时,此工具会调用 reboot(2) 系统调用本身并直接重新启动系统。否则,这只会​​使用适当的参数调用 shutdown(8) 工具。

如果我阅读,man shutdown 8我会看到:

关机安排以安全的方式关闭系统。所有登录的用户都会收到系统正在关闭的通知,并且在 TIME 的最后五分钟内,将阻止新的登录。

我对reboot和之间的区别的基本理解init 6是:

  • 在其他发行版上,也许较旧的发行版reboot只会卸载磁盘并基本上轻弹电源开关而无需运行任何关闭脚​​本
  • init 6将运行所有关闭脚本,/etc/init/rc.*因为它会降低系统的运行级别
  • 在较新版本的 Ubuntu 上,该reboot命令没有--force-f将运行关闭命令,该命令基本上与init 6
  • 养成使用init 6而不是使用的习惯可能会更好,reboot因为它更安全并且跨发行版工作得更好,但是reboot如果有人使用它,它的默认行为已被更改以尝试防止错误/数据丢失。

差不多吧?如果没有,我错过了什么?

Eli*_*gan 24

真的没有任何令人信服的理由使用init 6代替reboot,除非:

  • 由于某种原因,您缺少reboot可执行文件,或者
  • 您有意避免通知用户系统正在停机。

reboot(只要你不跑reboot --force)实际上是“更软”的关闭方式。

考虑:

init 6将运行所有关闭脚本,/etc/init/rc.*因为它会降低系统的运行级别

reboot命令,称为--force标志,不仅直接重新启动系统(通过reboot系统调用)时,这两种情况之一者:

  • 该系统是在运行级别0(单用户模式),所以没有降低其运行级别的发生,因此没有关机脚本自动运行。
  • 该系统是在runlevel 6.什么init 6所做的只是把系统在runlevel 6同样,没有什么运行init 6会做运行reboot命令不会做。

否则,sudo reboot等价于sudo shutdown -r now。这完成了所有美好的事情sudo init 6,而且还:

  • 通知用户系统正在关闭。
  • 阻止新的登录(尽管他们可能无论如何都不会成功)。
  • sudo init 6.

如果您在一个只有您登录且只有本地登录的系统上,那么使用init 6重新启动没有任何问题。如果这就是您喜欢重启的方式,那么无论如何,请继续——这样做不会损害任何东西。但是,这样做也没有什么客观的可取之处。

init自己的文档说这不是关闭或重新启动系统的正常方法。考虑当init由用户运行时(就像您运行 时sudo init 6),它实际运行telinit(请参阅man init)。telinit是实际更改运行级别的内容。并man telinit告诉我们:

通常您会使用 shutdown (8) 工具来停止或重新启动系统,或者将其降到单用户模式。