问题描述
重新启动与ubuntu的init 6相同吗?
我在 Amazon EC2 上运行 Ubuntu 12.04。当 ssh 进入框中时,我可以输入 runlevel
并得到:
N 2
看着 man reboot
我看到:
\\n
When called with –force or when in runlevel 0 or 6, this tool invokes the reboot(2) system call itself and directly reboots the system. Otherwise this simply invokes the shutdown(8) tool with the appropriate arguments.
\\n
如果我阅读 man shutdown 8
我会看到:
\\n
shutdown arranges for the system to be brought down in a safe way. All logged-in users are notified that the system is going down and, within the last five minutes of TIME, new logins are prevented.
\\n
我对 reboot
和 init 6
之间区别的基本理解是:
-
在其他发行版和可能较旧的发行版上,
reboot
只会卸载磁盘并基本上轻按电源开关而不运行任何关闭脚本 -
init 6
将运行/etc/init/rc.*
中的所有关闭脚本,因为它降低了系统的运行级别 -
在较新版本的 Ubuntu 上,不带
--force
或-f
的reboot
命令将运行关机命令,该命令基本上与init 6
做同样的事情 -
养成使用
init 6
而不是reboot
的习惯可能会更好,因为它更安全并且会更好地工作 cross-distro,但reboot
的默认行为已更改,以尝试防止有人使用它时出现错误/数据丢失。
这对吗?如果没有,我错过了什么?
最佳回答
真的没有任何令人信服的理由使用 init 6
而不是 reboot
,除非:
-
由于某种原因,您缺少
reboot
可执行文件,或者 -
您故意试图避免通知用户系统正在关闭。
reboot
(只要你不运行 reboot --force
)实际上是 “softer” 的关闭方式。
考虑:
\\n
init 6
will run all of the shutdown scripts in/etc/init/rc.*
as it reduces system’s runlevel\\n
但是,在没有 --force
标志的情况下调用的 reboot
命令只有在以下两种情况之一适用时才会直接重新启动系统(通过 reboot
系统调用):
-
系统处于 runlevel 0(单用户模式),因此不会降低运行级别,因此不会自动运行关闭脚本。
-
系统处于运行级别 6。
init 6
的作用是将系统置于运行级别 6 中。同样,运行init 6
不会做任何运行reboot
命令不会做的事情。
否则, sudo reboot
等效于 sudo shutdown -r now
。这完成了 sudo init 6
所做的所有好事,而且:
-
通知用户系统正在关闭。
-
阻止新的登录(尽管它们可能无论如何都不会成功)。
-
比
sudo init 6
更直观且 self-documenting 。
如果您在一个只有您登录且只有本地登录的系统上,则使用 init 6
重新启动没有任何问题。如果这就是您更喜欢重新启动的方式,那么无论如何,请继续 – 您这样做不会伤害任何东西。但是,这样做在客观上也没有什么可取的。
init
自己的文档说这不是关闭或重新启动系统的正常方法。考虑到当 init
由用户运行时(例如运行 sudo init 6
时),它实际上运行 telinit
(请参阅 man init
)。 telinit
是实际更改运行级别的内容。 man telinit
告诉我们:
\\n
Normally you would use the shutdown(8) tool to halt or reboot\\n the system, or to bring it down to single-user mode.
\\n