2007年11月25日 星期日

執行層級 runlevel

Linux 與許多 Unix 系統都有 執行層級 runlevel 的觀念,意即藉由控制實際啟動的服務組合,而改變系統用途。舉例而言,一台網頁伺服器,我們會希望他在開機時,自動啟動 Apache Server。每一個不同的執行層級會執行對應的各個 script 檔,而每一執行層級的 script 檔備存放在 /etc/rc.d/rc[x].d 目錄,其中 [x] 即為 runlevel。以下說明各個層級的意義:

層級目錄描述
0 /etc/rc.d/rc0.d
Halt ,關機,切斷系統的電源。這是過渡性的運作層級,不能設為預設的執行層級,否則會造成一開機即關機。
1 /etc/rc.d/rc1.d
Single-user mode,單用戶模式。此模式通常只含基本運作,而不妨礙維修的基礎服務。
2/etc/rc.d/rc2.d Red Hat:Multiuser, without NFS,不提供 NFS 檔案共享服務的多人模式。
Debian:Full multi-user mode,多人模式。
3/etc/rc.d/rc3.d Red Hat:Full multi-user mode (no GUI interface) ,多用戶模式,無圖形界面。
Debian:預設不使用。
4 /etc/rc.d/rc4.d
Not used (user-definable) ,未使用,用戶定義。
5 /etc/rc.d/rc5.d
Red Hat:Full multiuser mode (with GUI interface),多用戶模式,圖形界面。
Debian:預設不使用。
本層級相當層級 3 外加 X11 在加上 GUI 登入服務,一般桌面系統都以此為預設層級。
6 /etc/rc.d/rc6.d
Reboot ,重新開機,這是過渡性的運作層級,不能設為預設的執行層級,否則會造成不斷重新開機。


如何設定預設執行層級 runlevel?

編輯 /etc/inittab,範例如下
# Level to run in
# 定義預設執行層級,在此 runlevel 為 2
id:2:initdefault:

# System initialization before anything else.
# 系統初始化
si::sysinit:/etc/rc.d/bcheckrc

# Runlevel 0,6 is halt and reboot, 1 is maintenance mode.
# 個別運作層級的處始化
l0:0:wait:/etc/rc.d/rc.halt
l1:1:wait:/etc/rc.d/rc.single
l2:2345:wait:/etc/rc.d/rc.multi
l6:6:wait:/etc/rc.d/rc.reboot
開機時,即會根據 runlevel ,執行 /etc/rc.d/rc[x].d 目錄下的 script。

如何改變執行層級 runlevel?

當想進行系統維護需要進入單人模式,或是要從文字登入畫面改成 GUI 登入畫面,或是想要關閉系統或重新開機,改變系統當時的執行層級,是眾多的做法之一。
但在運作之前,可能會需要了解一下目前的 runlevel,而使用的指令即為 runlevel
bang@linuxdiary:~$ runlevel
N 2
第一個字代表前次的執行層級,第二個數字代表現在的執行層級。N 代表前次與現在一樣沒有變過。
知道了目前的執行層級後,可利用 init 或 telinit 命令來改變執行層級,telinit 通常是 init 的硬連結或軟連結,兩者使用方法完全相同,以下為範例:
讓系統立刻關機
root@linuxdiary:~# init 0
讓系統立刻重新開機
root@linuxdiary:~# init 6
讓系統立刻進入單人模式
root@linuxdiary:~# init 1


root@linuxdiary:~# init s

沒有留言: