小技巧:讓Linux服務器在kernel panic時自動重啟
現(xiàn)在的 Linux 比幾年前要成熟的多,但有時候還是會出現(xiàn)莫名其妙、無法解釋的 kernel panic 情況。對于大部分 Linux 用戶來說出現(xiàn) kernel panic 重啟一下就可以了,但是對于系統(tǒng)管理員和那些做虛擬主機、共享主機、OpenVZ VPS 主機的 hosting 服務商來說出現(xiàn)未知的 kernel panic、導致系統(tǒng)掛掉可能就不太友好,如果沒有 KVM over IP 的話,系統(tǒng)掛掉后 hosting 服務商需要自己先反饋到上一級的獨立服務器提供商,比如提交 ticket 或者打電話,然后獨立服務器供應商還要時間驗證你的資料、處理你的 ticket,***才到真正的數(shù)據(jù)中心,一般晚上(中國的白天)數(shù)據(jù)中心只有幾個人值班,到***處理完你的重啟 ticket 可能已經(jīng)過了20多分鐘了,這20分鐘的 downtime 時間你還要給你自己的客戶寫信解釋情況,問題是這20分鐘還是理想情況,如果你碰到一個很爛的獨立服務器提供商或數(shù)據(jù)中心,處理 ticket 要以小時或天為單位來計,或者如果你是 one man、晚上正在睡覺沒有收到 kernel panic 報警,這樣的話花的時間就會更多。那么有沒有辦法讓 Linux 服務器遇到 kernel panic 情況自動重啟呢?VPSee 在這里介紹一個簡單有效的小技巧:
編輯 /etc/sysctl.conf 文件,并定義遇到 kernel panic 20秒后自動重啟 Linux:
# vi /etc/sysctl.conf kernel.panic = 20
Linux 這么神奇?遇到 kernel panic 自己都不行了還能自己自動重啟?來看看 Linux 內(nèi)核里面這部分代碼是怎么工作的,***最權(quán)威的資料永遠來自內(nèi)核源代碼:
# 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();
- }
- ...
【編輯推薦】