AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 506341
Accepted
Luciano Andress Martini
Luciano Andress Martini
Asked: 2019-03-15 10:25:08 +0800 CST2019-03-15 10:25:08 +0800 CST 2019-03-15 10:25:08 +0800 CST

Debian 9 halt 在新版本中并没有真正关闭电源 - 为什么?

  • 772

重要提示: 如果我这样做,我可以恢复停止旧行为:

apt install sysvinit-core  

另外:基于旧Red Hat的版本也可以通过停止来关闭电源。

我试图理解为什么在 Debian 9 中你不应该再使用 halt 来关闭你的计算机。该行为已从 systemd 中删除。我有点害怕,但我认为一定有一个很好的合乎逻辑的理由。

其他 unix 或类 unix 是否具有相同的行为,或者 Linux 是否正在变成不同的东西?

现在,如果您想在系统关闭后关闭机器,您应该使用 poweroff 而不是 halt ...

有人知道这个命令在其他类 Unix 中是如何解释的吗?

这不是重复的,因为例如 debian 7 可以通过停止来关闭电源。

debian halt
  • 2 2 个回答
  • 2177 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2019-03-19T08:22:56+08:002019-03-19T08:22:56+08:00

    Debian

    在 Debian(esque) 系统中使用 SysVinit 时,/etc/defaults/halt包含一个变量,该变量定义系统在转换到运行级别 0 结束时是运行停止还是关机。默认设置为HALT=poweroff.

    在 SysVinit 2.74 之前,您不应该halt直接运行,并且从该版本开始,除非当前运行级别为 0 或 6,否则SysVinithalt命令只会调用。这在手册页中有记录。在过渡到运行级别 0 结束时,运行级别脚本将运行,默认情况下等于。shutdown -hhalt(8)$HALTpoweroff

    RHEL/CentOS

    RHEL/CentOS 5 是使用 SysVinit 的最后一个版本:使用版本 6 upstart,版本 7 使用systemd. 在 RHEL 5.11 中,转换到运行级别 0 时要运行的最后一个脚本是/etc/init.d/halt,它的最后几行是:

    [ "$INIT_HALT" != "HALT" ] && HALTARGS="$HALTARGS -p"
    
    exec $command $HALTARGS
    

    由于在转换到运行级别 6(重新启动)结束时也会运行相同的脚本,因此要运行的实际命令由变量 定义$command,它将是/sbin/halt或/sbin/reboot。根据$INIT_HALT变量的值,脚本会决定是否添加-p选项。该变量由 设置/sbin/shutdown。RHEL 5.11shutdown(8)手册页说:

    暂停或关机

    -H 选项只是将初始化环境变量 INIT_HALT 设置为 HALT,而 -P 选项只是将该变量设置为 POWEROFF。在关闭序列中调用 halt(8) 作为最后一件事的关闭脚本应该检查这些环境变量并使用正确的选项调用 halt(8) 以使这些选项实际产生任何效果。Debian 3.1 (sarge) 支持这个。

    (是的,RHEL 5.11 手册页提到了 Debian 3.1!我猜 RedHat 有人将补丁从各种来源移植到 RHEL 错过了一个参考...)

    看起来 RedHat 决定在脚本中对上述测试进行编码,/etc/init.d/halt这样关闭电源(/sbin/halt -p在关机结束时使用)是默认的停止动作:在没有关机的情况下实现停止的唯一方法是使用显式请求它的命令的大写-H选项,例如shutdownshutdown -hH now

    但同样,默认关机是由 Linux 发行版自定义的运行级别脚本触发的,因此它并不是 SysVinithalt命令的真正功能。

    历史记录

    旧的使用 SysVinit 的系统(Linux 和非 Linux)曾经有几个不打算直接使用的命令,而只是作为适当的关闭/重启脚本的一部分。在 SysVinit 2.74 之前,/sbin/halt不带选项的命令将与现代 SysVinit 执行相同halt -f的操作,即在不停止任何服务或卸载文件系统的情况下立即残酷地关闭内核。

    出于同样的原因,习惯于 Linuxkillall命令在其他 Unix 上可能是危险的。它的手册页甚至有这个不祥的警告:

    请注意,在非 Linux 系统上键入 killall name 可能不会产生预期的效果,尤其是当由特权用户完成时。

    这是因为经典的 SystemVkillall是那些设计为仅用作关闭脚本的一部分的命令之一。在带有 SysVinit 的 Linux 发行版中,该命令的经典版本可能是killall5. 它实际上会杀死除内核线程和它自己的会话中的进程之外的所有进程:它的预期用途是在关闭所有服务之后,就在卸载本地文件系统之前的关闭脚本中,以杀死可能延迟或阻止卸载的任何其他进程。

    (你问我怎么知道的?嗯,我曾经犯过killall <something>在 Solaris 2.6 系统上以 root 身份运行的错误。非常有效的学习经验。)

    • 6
  2. JdeBP
    2019-03-15T17:16:12+08:002019-03-15T17:16:12+08:00

    这个问题是基于多种错误的。

    一个人没有halt用来关闭一个人的电脑,这并没有随着 systemd 改变。

    haltakahaltsys关闭并停止。 poweroff是一个较新的命令,可以关闭并关闭电源。(https://unix.stackexchange.com/a/196471/5132解释了我将在此处忽略的细微之处,因为问题仅与 Linux 操作系统有关。此答案仅针对 AT&T System 5 UNIX宇宙的另一面。)

    正如我在https://superuser.com/a/900205/38062中解释的那样,计算机不一定能够在软件控制下关闭电源。haltsys和命令的动作halt通常是关闭和停止机器,下一个动作是操作员使用物理复位按钮或电源开关。

    halt获得了-p/--poweroff选项以使其等效于poweroff,但这是这些命令的重叠和自相矛盾选项普遍增长的症状。见证Debian 7中 Upstart 命令的手册页halt。在halt --poweroff那里。 Debian 7中 van Smoorenburg 命令的手册页halt也有halt -p.

    但这并没有随着 systemd 改变。systemd 提供相同的功能。systemdhalt命令 也有--poweroff. _ 它还具有--reboot和(为了更好地衡量)--halt选项。

    为了兼容性,我必须对nosh 工具集中的halt/haltsys命令做同样的事情。

    您可能会错误地认为普通的老式halt计算机关闭了电源。但这对于 Upstart 来说显然是错误的,而且只有在你碰巧遇到错误时才适用于 van Smoorenburg 工具集。

    直到今年才终于修复的错误是 van Smoorenburghalt命令将简单地忽略选项的存在或不存在-p,而是根据/etc/default/halt. 如果您碰巧将该设置设置为关闭电源,那么halt即使未-p提供任何选项,也会始终关闭电源。相反,如果您碰巧将该设置设置为停止,那么halt即使-p提供了选项,也会始终停止。

    但这是一个错误,不是记录的或预期的行为,不是haltDebian 上可用的每个命令的行为,也不是该halt命令的常规行为。

    进一步阅读

    • 乔纳森·德博因·波拉德 (2018-12-07)。Bug#586709:由 Thomas Goirand 关闭。Debian 错误 #586709。
    • 杰西·史密斯 (2019-03-08)。initscripts:命令halt意外改变的行为。Debian 错误 #743555。
    • 3

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve