Linux系統關機與重新
不同於桌面系統,作為服務器,我們較少對Linux系統進行系統重啟,但在以下情形出現時,我們會對機器進行重啟: www.2cto.com
更換硬件
更改系統配置
系統僵死,需要重啟恢復
關閉和重啟系統方式
引導系統本質上只能用一種方法,與此不同的是,關閉或重新引導系統有多種方法:
關閉電源(下電)
使用shutdown命令
使用halt、poweroff或reboot命令 www.2cto.com
使用telinit改變init運行級別
關閉電源
基於以下兩點原因,直接對機器下電,並不是一種好的習慣:
可能導致硬件損壞
部分數據可能仍在內存,未被寫回磁盤,這時下電會丟失數據或造成文件系統損害;
因而盡量使用其他方式關閉或重新引導系統。
shutdown命令
使用shutdown可以掛起(halt)或重啟(reboot)系統,使用-h選項指示掛起系統,起到與halt命令相同的作用;使用-r選項指示重啟系統,起到與reboot命令相同的作用。
執行shutdown命令後,系統將向所有登陸用戶發送掛起或重啟消息。
執行shutdown –h now後發送掛起消息:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;"># shutdown -h now
Broadcast message from root (tty1) (Thu May 3 10:58:22 2012):
The system is going down for system halt NOW!
INIT: Switching to runlevel: 0
INIT: Sending processes the TERM signal</span>
執行shutdown –r now後發送重啟消息:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;"># shutdown -r now
Broadcast message from root (tty1) (Thu May 3 11:18:22 2012):
The system is going down for system reboot NOW!
INIT: Switching to runlevel: 6
INIT: Sending processes the TERM signal</span>
執行shutdown後,其他用戶不能再登入系統,另我們可以指定系統掛起或重啟的時間以及說明,如下兩例:
凌晨1::00停機維護:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;">shutdown –h 1:00 “going down for scheduled maintenance. Expected downtime is 1 hour.”</span>
指定相對關機時間15分鐘後關機:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;">shutdown –h +15 “going down for emergency check.”</span>
halt和reboot命令
halt記錄關機情況,終止非必要進程,執行sync系統調用,等待文件系統寫操作完成,然後停止內核,poweroff命令等價於halt。
從以上”shutdown –h”和”shutdown –r”執行輸出可知,執行halt即進入運行級別0,執行reboot即進入運行級別6,日志文件/var/log/messages中會記錄相應日志。
系統重啟日志:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;">May 3 11:45:25 slot14 shutdown[11119]: shutting down for system reboot
May 3 11:45:25 slot14 init: Switching to runlevel: 6
May 3 11:45:25 slot14 user_cmd: 2012-05-03 11:45:25 shutdown -r now by root from [root tty1 May 3 11:44]</span>
系統掛起日志:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;">May 3 10:50:22 slot14 shutdown[11561]: shutting down for system halt
May 3 10:50:22 slot14 init: Switching to runlevel: 0
May 3 10:50:22 slot14 user_cmd: 2012-05-03 10:50:22 shutdown -h now by root from [root tty1 May 3 10:48]</span>
通過查看/var/log/messages日志記錄,可判斷機器是無端重啟還是人為地重啟。
telinit命令
執行telinit命令可以指引init進入指定的運行級別,如重啟系統:
[sql]
<span style="font-family:Comic Sans MS;font-size:18px;">#telinit 6</span>
使用telinit時,不會得到像執行shutdown那樣友好的警告信息,較少用作掛起和重啟命令,不過進行/etc/inittab文件的修改測試,使用該命令比較方便。
小結
對於承載已上線業務的服務器,重啟系統是比較大的動作。當操作系統相關故障發生時,我們應先考慮收集日志信息,必要時再進行系統重啟。