红联Linux门户
Linux帮助

Linux遇到kernel panic后可自动重启

发布时间:2014-11-26 10:22:42来源:linux网站作者:fyh2003

现在的 Linux 比10年前要成熟的多,但有时候还是会出现莫名其妙、无法解释的 kernel panic 情况。对于大部分 Linux 用户来说出现 kernel panic 重启一下就可以了,但是对于系统管理员和那些做虚拟主机、共享主机、OpenVZ VPS 主机的 hosting 服务商来说出现未知的 kernel panic、导致系统挂掉可能就不太友好,如果没有 KVM over IP 的话,系统挂掉后 hosting 服务商需要自己先反馈到上一级的独立服务器提供商,比如提交 ticket 或者打电话,然后独立服务器供应商还要时间验证你的资料、处理你的 ticket,最后才到真正的数据中心,一般晚上(中国的白天)数据中心只有几个人值班,到最后处理完你的重启请求可能已经过了20多分钟了,这20分钟的 downtime 时间你还要给你自己的客户写信解释情况,问题是这20分钟还是理想情况,如果你碰到一个很烂的独立服务器提供商或数据中心,处理 ticket 要以小时或天为单位来计,或者如果你是 one man、晚上正在睡觉没有收到 kernel panic 报警,这样的话花的时间就会更多。那么有没有办法让 Linux 服务器遇到 kernel panic 情况自动重启呢?


编辑 /etc/sysctl.conf 文件,并定义遇到 kernel panic 20秒后自动重启 Linux:

# vi /etc/sysctl.conf kernel.panic = 20


Linux 这么神奇?遇到 kernel panic 自己都挂了还能自己重启?来看看 Linux 内核里面这部分代码是怎么工作的,最好最权威的资料永远来自内核源代码:

# vi linux-2.6.31.8/kernel/panic.c ... if (panic_timeout > 0)
{ /*
* Delay timeout seconds before rebooting the machine.
* We can't use the "normal" timers since we just panicked.
*/ printk(KERN_EMERG "Rebooting in %d seconds..", panic_timeout); for (i = 0; i < panic_timeout
*1000; ) { touch_nmi_watchdog(); i += panic_blink(i); mdelay(1); i++; }
/*
* This will not be a clean reboot, with everything
* shutting down. But if there is a chance of
* rebooting the system it will be rebooted.
*/ emergency_restart();
} ...