歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux 遇到 kernel panic 後可自動重啟

現在的 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(); } ...

Copyright © Linux教程網 All Rights Reserved