it-swarm.cn

停止命令和关机命令之间有什么区别?

haltshutdown命令有什么区别?

100
wassimans

通常,使用 shutdown命令 。它允许在关机或重新引导之前有时间延迟和警告消息,这对于多用户Shell服务器的系统管理非常重要;它可以为用户提供停机前的通知。

这样,必须像这样使用shutdown命令才能立即停止/关闭计算机(至少在Linux和FreeBSD上):

shutdown -h now

或使用提前30分钟的自定义警告重新启动它:

shutdown -r +30 "Planned software upgrades"

延迟后,shutdown告诉 init 更改为运行级别0(暂停)或6(重新引导)。 (请注意,省略-h 要么 -r将导致系统进入单用户模式(运行级别1),这会杀死大多数系统进程,但实际上并没有停止系统;仍然允许管理员保持root身份登录。)

一旦系统进程被杀死并卸载了文件系统,系统将停止/关闭电源或自动重新引导。使用 haltreboot命令 完成此操作,该命令会将更改同步到磁盘,然后执行实际的暂停/关闭电源或重新启动。

在Linux上,如果在系统尚未启动关闭进程的情况下运行haltreboot,它将自动调用shutdown命令,而不是直接执行其预期的操作。但是, 在FreeBSD等系统上 ,这些命令首先将动作记录在 wtmp 中,然后立即自行执行暂停/重新引导,而无需先终止进程或卸载文件系统。

80
PleaseStand

过去

在1980年代,BSD具有haltrebootshutdown。 System 5 UNIX具有BSD兼容性工具集。但是它本身具有自己的不同的shutdown命令;并且根本没有haltreboot。 (某些System 5变体具有SCO XENIX的haltsys。)。

BSD的haltreboot命令是低级,激烈且即时的。关闭BSD系统的考虑方法是shutdown命令,该命令完成了人们期望发生的所有事情:向用户发送wall消息,正常终止服务,写入日志条目,禁用登录名以及等等。

尽管BSD在很大程度上是人们所接受的智慧起源于“ shutdown执行者halt/reboot”,并且应谨慎使用后者。在System 5世界中,人们学会了相反的习惯,即halt/reboot只是方便的简写,仅此而已:“ BSD兼容性软件包”中的_/usr/ucb/halt_与_shutdown -h_没什么不同。他们俩最终都做了_init 0_。

进一步阅读

今天

如今,我们拥有一系列可能的系统管理工具集。尽管在1990年代清除了所有可能的AT&Tism,但BSD仍然具有其工具集。 Miquel van Smoorenburg在1992年(重新)编写了Linux init + rc及其相关工具,人们现在称其为“ System 5 init”,即使它实际上不是UNIX System 5中的软件(并且确实是“只是init)。还有 systemdpstartnosh ,每个都有haltreboot[它们自己的实现fasthaltfastboot等。

工具集也不断发展和变化。现在有一个poweroff命令,在1980年代的操作系统中不存在,因为大多数现代机器上的中央处理单元无法控制其电源。尤其是Linux工具集已经获得了BSD命令。但是,就像UNIX System 5上的BSD兼容性工具一样,它们并不是完全一样的东西,并且已经大体上变得平坦了。

这种扁平化使我们达到了haltshutdown主要相同的地步。但是确切的细节因工具集而异,并且每个工具集的机制都略有不同。

它也使我们陷入了一个令人尴尬的境地,该命令集已经变得很容易被兼容选项所吸引,现在它使人们能够给计算机提供自相矛盾的指令,例如_reboot --halt_和_poweroff --reboot_, nosh haltfasthaltrebootfastbootpoweroff命令的手册页。 ☺

系统工具集

haltrebootpowerofftelinitshutdown所有一个程序。它实际上是systemd自己的systemctl程序。它具有几个命​​令行解析器,用于这些命令的各种命令行语法以及它自己的语法,但是在此之后,很大程度上将其内部合并到一个代码路径中。使用halt及其命令选项来触发动作与使用shutdown及其命令选项来触发相同动作没有区别。

systemd不会将救援模式(这是systemd员工已将其重命名为[单用户模式)视为关闭的系统状态,并且这些状态均无法达到命令。无选项_shutdown now_与poweroff相同。

进一步阅读:

BSD

BSD在很大程度上保留了1980年代的语义。因此,haltshutdown在它们的工具集中非常相似nothaltreboot是一个程序。并且仍然处于低水平,即时和激烈的状态。而shutdownpoweroff(也是一个程序)则执行所有体贴的工作,例如计划关闭,编写wall消息,记录操作,禁用登录等等。

在BSD工具集中,shutdown/poweroff传统上会最终调用halt/reboot来制定最终的系统状态更改。 (时下通常是错误的)人们已经意识到,“ shutdown execs halt/reboot”实际上仍然适用于NetBSD和OpenBSD。但是在FreeBSD/TrueOS/DragonFlyBSD上,只有使用_-o_选项才是这种情况。在这些BSD上,这些程序的两者通常通过发送各种信号(INT,_USR1_和_USR2_)来制定最终的系统状态更改。流程#1。 init在这些系统上执行all系统状态管理。

在所有这些选项上,无选项_shutdown now_不等于haltrebootpoweroff中的任何一个。它过渡到BSD 单用户模式,从中可以将BSD 后退过渡到多用户模式

进一步阅读:

Nosh工具集

在nosh系统管理工具集中,haltfasthaltpowerofffastpoweroffrebootfastboot都是一个程序。这是一个向后兼容的填充程序,通常只链接到shutdown,即收到的知识的相反。 _--force_选项使其链接到_system-control_。

因此,此工具集中的halt命令和shutdown命令(具有等效选项)之间没有区别(缺少_--force_),因为这组“ BSD/System 5兼容性”命令只是覆盖该对象的薄垫片层。 shutdown的顶部。

进一步阅读:

新贵工具集

像nosh一样,在新贵的系统管理工具集中,收到的BSD智慧也适用。 haltrebootpoweroff都是一个程序,通常链接到shutdown;除非使用_--force_选项,否则它将使reboot()系统调用本身。

因此,同样,此工具集中的halt命令和shutdown命令(具有等效选项)之间没有区别(缺少_--force_)。同样,没有选项的_shutdown now_(haltrebootpoweroff都不能最终调用,因为它们都设置了选项)使系统进入单用户模式而不是将其关闭。

进一步阅读:

Linux系统5 init + rc工具集

同样,在此工具集中,与收到的BSD知识相反的是,haltreboot只是简单地链接到shutdown -除非系统已处于关闭电源或停止“运行级别”,在这种情况下,这些命令实际上会制定最终的系统状态更改。 shutdown依次链接到init

因此,同样,haltshutdown之间没有区别(除非系统已已经大大关闭),因为前者只是调用后者。是的,同样,无选项的_shutdown now_(haltrebootpoweroff都不能最终调用,因为它们都设置了选项)使系统进入单用户模式而不是关闭它下来。

52
JdeBP

我怀疑这在某种程度上取决于您使用的UNIX/Linux版本。在Centos上(并且我期望使用其他现代Linux),请停止调用shutdown(前提是您不在 运行级别 0或6),因此您的系统将完全关闭。在Solaris 10上,停止更为残酷,它只是刷新磁盘缓存并关闭系统电源-不会尝试运行任何脚本或关闭 smf 功能。

11
user591

对于使用AWS EC2的用户:在AWS shutdown停止实例上,当halt终止实例时。

3
dveim

在Linux中,“ halt”和“ reboot”是shutdown命令的别名-shutdown -hshutdown -r 分别。密码关闭通常假定为-h。

0
Shadur