歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 遇到 kernel panic 後可自動重啟

Linux 遇到 kernel panic 後可自動重啟

日期:2017/2/28 15:57:43   编辑:Linux教程

現在的 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