我有一个正在玩的家庭服务器:) 我想学习服务器管理...
我很难理解shutdown -h now
和poweroff -h
现在之间的区别我的逻辑告诉我这是同一件事......
但关机后,Linux 停止运行,电源仍保持开启状态 - 我可以看到所有灯都亮着,冷却器也在旋转。奇怪的是,完全关闭我的盒子的唯一方法是使用poweroff -h
如能提供任何澄清,我们将不胜感激!
答案1
答案就在poweroff(8) 手册页:
当使用 --force 调用或在运行级别 0 或 6 中调用时,此工具会调用 reboot(2) 系统调用本身并直接重新启动系统。否则,这只会调用 关机(8) 工具并使用适当的参数。
一点解释:
这reboot() 系统调用 是用于重新启动、暂停或关闭计算机的内核函数。它
reboot
因历史原因而被调用,但根据传递给它的参数,它执行所有三个功能。halt
和之间的区别poweroff
在于,在halt
模式下,控制权返回到“ROM 监视器”(类似 BIOS),而 模式下则poweroff
只是关闭系统板。(我从未见过这种区别在 PC 架构上起作用;但在 Sun 机器上情况有所不同。)因此,当
poweroff
Linux 系统处于运行级别0 或 6,它将立即地通过系统调用关闭系统reboot(RB_POWEROFF)
。在任何其他情况下,
poweroff
只会作为 的别名shutdown now
。
答案2
对于最初的问题“shutdown”与“poweroff”:顾名思义,“shutdown”以类似“cli(); while(1);”的形式结尾,而“poweroff”以某种方式与电源进行通信,然后以与“shutdown”类似或相同的循环结束执行。(仅适用于电源出现问题的情况。)
对于 Raspberry Pi,默认情况下也是一样。但是,有一个可用的标准内核覆盖,可以通过修改 /boot/config.txt 来加载:
dtoverlay = gpio-poweroff
这会将 GPIO26(引脚 37)默认更改为高电平输出。由于默认情况下不使用此引脚,并且未使用的引脚是没有上拉/下拉的输入,因此简单的电路可以在高电平时切断电源。注意(对于电路设计者):当然,断电后此引脚将恢复为低电平!因此请使用触发器。
正如覆盖名称“gpio-poweroff”所暗示的那样,它在“poweroff”时被调用(以某种方式由 systemd 调用),而不是在“shutdown”或“halt”时。