Tom Hale Asked: 2019-02-23 01:23:14 +0800 CST2019-02-23 01:23:14 +0800 CST 2019-02-23 01:23:14 +0800 CST logind.conf `IdleAction=kexec` 究竟做了什么? 772 logind.conf手册页说: 空闲动作= 配置系统空闲时要执行的操作。采用“ignore”、“poweroff”、“reboot”、“halt”、“kexec”、“suspend”、“hibernate”、“hybrid-sleep”、“suspend-then-hibernate”和“lock”之一。默认为“忽略”。 我没有看到kexec任何地方解释的价值。这里具体做什么kexec? 是否有kexec(8)它运行的等效命令行? 在什么情况下,无论如何在系统空闲时热重启到新内核是有用的? linux systemd 1 个回答 Voted Best Answer filbranden 2019-02-23T23:04:03+08:002019-02-23T23:04:03+08:00 是的,有一个kexec命令行工具可用于kexec进入新内核。 从用户的角度来看, usingkexec与 using 大致相同reboot,只是它往往更快,因为当前内核加载新内核并开始执行它(绕过 BIOS、固件、引导加载程序等) logind 提供诸如“kexec”(或“reboot”)之类的空闲操作的目的是帮助您的系统始终保持最新状态,这对于内核升级通常需要重新启动。空闲检测有助于确定何时是重新启动系统的好时机(希望在不会造成太大中断的时候)并经常重新启动它(假设它足够频繁地空闲)将确保它启动到包管理器安装更新后不久的新内核。 当然,这是一个并非所有用户都同意的设置,所以这当然不是此选项的默认设置(默认为“忽略”,它不执行任何操作......) 要了解kexec动作触发的确切内容,您可以开始查看systemctl kexec,它与systemctl reboot. 它的文档说: 通过kexec关闭并重新启动系统。这相当于systemctl start kexec.target --job-mode=replace-irreversibly --no-block。 所以这通过一个特殊的kexec.target,它通常配置为需要一个systemd-kexec.service,然后使用参数调用该/usr/lib/systemd/systemd-shutdown工具kexec(通过 a systemctl --force kexec,结果是......)。 更进一步,您需要查看源代码,您会发现它systemd-shutdown kexec只会尝试使用kexec -e重新启动,如果失败,逻辑会回退到“正常”重新启动。 查看kexec(8)手册页,您会看到执行kexec -ekexec 重新启动所需的全部内容,这就是 systemd 集成的全部内容。 缺少的另一部分是将引导内核加载到内存中的部分,即执行的部分,kexec -l以便实际执行将起作用。那是另一个兔子洞。我建议作为对读者的练习(或者可能非常适合 U&L 的一个单独问题!)
是的,有一个
kexec
命令行工具可用于kexec
进入新内核。从用户的角度来看, using
kexec
与 using 大致相同reboot
,只是它往往更快,因为当前内核加载新内核并开始执行它(绕过 BIOS、固件、引导加载程序等)logind 提供诸如“kexec”(或“reboot”)之类的空闲操作的目的是帮助您的系统始终保持最新状态,这对于内核升级通常需要重新启动。空闲检测有助于确定何时是重新启动系统的好时机(希望在不会造成太大中断的时候)并经常重新启动它(假设它足够频繁地空闲)将确保它启动到包管理器安装更新后不久的新内核。
当然,这是一个并非所有用户都同意的设置,所以这当然不是此选项的默认设置(默认为“忽略”,它不执行任何操作......)
要了解
kexec
动作触发的确切内容,您可以开始查看systemctl kexec
,它与systemctl reboot
. 它的文档说:所以这通过一个特殊的kexec.target,它通常配置为需要一个systemd-kexec.service,然后使用参数调用该
/usr/lib/systemd/systemd-shutdown
工具kexec
(通过 asystemctl --force kexec
,结果是......)。更进一步,您需要查看源代码,您会发现它
systemd-shutdown kexec
只会尝试使用kexec -e
重新启动,如果失败,逻辑会回退到“正常”重新启动。查看kexec(8)手册页,您会看到执行
kexec -e
kexec 重新启动所需的全部内容,这就是 systemd 集成的全部内容。缺少的另一部分是将引导内核加载到内存中的部分,即执行的部分,
kexec -l
以便实际执行将起作用。那是另一个兔子洞。我建议作为对读者的练习(或者可能非常适合 U&L 的一个单独问题!)