如何及早配置Linux内核以使其重新启动?


13

您可以在内核命令行上输入“ panic = N”,以使系统在出现紧急情况后N秒重启。

但是,即使在启动加载程序出现之前,是否有一个配置选项可以指定此选项(默认内核命令行选项除外)?一些内核选项可能是?


通过内核看门狗子系统,也许吗?
吉尔斯(Gilles)'所以

配置文件本身就是引导(grub)配置文件,因为它是在引导时调用的参数,并且在未挂载文件系统时不能期望grub从其他配置文件中读取。
Nikhil Mulley 2012年

我想您想重新启动到另一个内核?这将需要引导加载程序的一些配合,到那时,您肯定可以传递命令行参数。可以将某些引导加载程序设置为如果引导失败(通过使用户级程序向引导加载程序指示引导成功)来重新引导至其他内核。
吉尔(Gilles)'所以

是的,我将引导至其他内核,或者为内核提供不同的rootfs路径。引导加载程序的配置中有一个变量,当用户空间成功启动时,该变量会更改。如果它没有改变,那就知道尝试不同的方法。我希望的不仅仅是内核命令行,因为引导加载程序的配置可以被Linux用户空间修改。如果有问题,很可能是用户空间开始写入,然后关闭了设备电源。并且有一个后备默认配置;我仍在寻找最可靠的方法。
Shawn J. Goff 2012年

Answers:


2

似乎没有这样的配置选项。默认超时为0,根据http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898,该超时为“永远等待”。

该选项在kernel / panic.c中定义,您可以编写一个将初始值设置为其他值的补丁。

要在3秒后对重新启动进行硬编码,请更改:

int panic_timeout;

至:

int panic_timeout = 3;

当存在特殊机制时,建议不要修改消息来源:unix.stackexchange.com/a/517364/6622
poige

19

来自man proc

/ proc / sys /内核/紧急

该文件提供对内核变量panic_timeout的读/写访问权限。如果为零,内核将在紧急情况下循环;如果非零,则表示内核应在此秒数后自动重新引导。使用软件看门狗设备驱动程序时,建议设置为60。


我在这里寻找一个内核配置选项,而不是用户空间中的东西。具体来说,如果由于某种原因无法挂载根文件系统(或者由于其他某种原因而导致用户空间无法使用),则需要重新启动它。
肖恩·高夫

@ ShawnJ.Goff如果您还担心用户空间不足,那么您会问一个错误的问题(即使内核没有崩溃,您也要重新启动)。答案是看门狗。您需要激活看门狗子系统(如果/dev/watchdog一段时间未触摸,则触发重新启动)。请参阅Documentation/watchdog/watchdog-api.txt
吉尔斯(Gillles)“所以-别再作恶了”

1
是的,我有看门狗。我只是在设置尽可能多的安全网。
肖恩·高夫

有办法关机而不是重启吗?
Ciro Santilli新疆改造中心法轮功六四事件

@ ShawnJ.Goff引导加载程序支持在引导用户空间之前很长时间传递此参数。无论如何,请参阅我的答案:unix.stackexchange.com/a/517364/6622
poige

5

该配置文件是引导(grub)配置文件本身,因为它是在引导时调用的参数,并且在未挂载文件系统时不能期望grub从其他配置文件中读取。

但是,作为初始化设置,运行时也可以通过进行修改sysctl。因此,本质上/etc/sysctl.conf用参数更新kernel.panic = 3是配置更新。


1
grub并非在所有系统上;我正在使用的是不使用grub。我的引导程序的配置存储在闪存中。
肖恩·高夫

是的,它仍然可以挂载文件系统并读取内核配置文件吗?如果是,那么您就去了。因为它是引导加载程序,它在加载内核时将内核参数传递给内核。
Nikhil Mulley 2012年


3

在Linux Kernel中(我已经在3和以上版本中看到过),在中有选项.configCONFIG_PANIC_TIMEOUT是参数,默认为0。在这些版本的Linux内核中,Lekensteyn的答案也将起作用。但是那个变量是.config唯一的。

int panic_timeout = CONFIG_PANIC_TIMEOUT;


0

您可以使用补丁程序,它会添加一个配置选项。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.