linux内核panic默认不自动重启,必须设置非零kernel.panic值(如30)才启用秒级硬复位;临时用sysctl -w或写proc,永久写/etc/sysctl.d/;还需配套panic_on_oops=1等参数应对oops和软锁死。

设置 kernel.panic 的两种方式
该参数决定 panic 发生后等待多久执行硬复位(类似拔电源),不经过 systemd、不 sync 磁盘、不运行 shutdown 脚本。
-
临时生效(重启后丢失):
sudo sysctl -w kernel.panic=30
或直接写入 proc:echo 30 | sudo tee /proc/sys/kernel/panic -
永久生效:
向配置文件追加:echo "kernel.panic = 30" | sudo tee /etc/sysctl.d/99-panic.conf
加载新配置:sudo sysctl --system
验证是否生效
执行以下命令,输出应为设定的数值(如 30):
cat /proc/sys/kernel/panic配套关键参数建议一并启用
仅设 `kernel.panic` 不够——很多崩溃先表现为 oops 或软锁死(soft lockup),系统看似运行但已不可信。需同步开启:
-
panic_on_oops=1:oops 触发 panic(避免静默失效) -
softlockup_panic=1:软锁死触发 panic -
hung_task_panic=1:长时间挂起任务触发 panic
启用方式(临时):
echo 1 | sudo tee /proc/sys/kernel/{panic_on_oops,softlockup_panic,hung_task_panic}
注意启动参数也可覆盖 sysctl 设置
在 GRUB 中添加内核启动参数更底层、优先级更高:
- 编辑
/etc/default/grub,修改GRUB_CMDLINE_LINUX行,末尾加panic=30 - 运行
sudo update-grub && sudo reboot - 该值会覆盖 sysctl 中的设置,且早于用户空间加载
不复杂但容易忽略











