如何在RHEL中触发内核Panic且触发后不重启系统
如何触发内核Panic且阻止系统自动重启
看起来你遇到的问题是即使设置了kernel.panic=0,触发Panic后系统还是会自动重启——这大概率是因为有其他系统机制(比如硬件看门狗)或者内核参数没有正确生效导致的。下面是分步解决方法:
1. 确保kernel.panic参数正确生效
这个参数定义了内核Panic后等待多少秒重启,设置为0表示永不重启。先临时生效:
echo 0 > /proc/sys/kernel/panic # 或者用sysctl命令 sysctl -w kernel.panic=0
如果想让设置永久生效,编辑/etc/sysctl.conf,添加或修改:
kernel.panic = 0
执行sysctl -p让配置立即生效。
2. 检查并禁用硬件看门狗
很多服务器或主板自带硬件看门狗,当内核Panic后,看门狗因为收不到内核的心跳信号,会强制重启系统。你需要先禁用它:
- 查看是否加载了看门狗模块:
常见的模块名有lsmod | grep watchdogwatchdog、iTCO_wdt、hpwdt等。 - 卸载对应的模块(以
iTCO_wdt为例):rmmod iTCO_wdt - 如果卸载失败(提示被占用),可以尝试临时关闭看门狗:
这个命令会向看门狗设备发送关闭信号,多数系统支持此操作。echo V > /dev/watchdog
3. 确保SysRq命令被允许触发Panic
检查kernel.sysrq参数,它控制哪些SysRq命令可以执行:
sysctl kernel.sysrq
如果值为0,表示完全禁用SysRq;你需要设置为1(允许所有SysRq命令),或者至少设置为包含位2的值(允许触发Panic的c命令):
sysctl -w kernel.sysrq=1
4. 触发内核Panic
完成以上设置后,再执行触发命令:
echo c > /proc/sysrq-trigger
此时系统应该会进入Panic状态,显示内核堆栈信息,并且不会自动重启。
内容的提问来源于stack exchange,提问作者Azhar Hussain




