Ubuntu 6.10 (Edgy Eft) 之後使用 Upstart 代替原來的 sysinit,而 init 是用來管理 Upstart 的 Daemon,本來系統預設的 runlevel 可以在 /boot/menu.list 或者是 /etc/inittab,可是現在這檔案已經移除了,取而代之的就是 Upstart 管理,可以利用 telinit 來改變系統 runlevel,然而現在 runlevel 的定義跟以前不太一樣了,原先 Ubuntu 跟 Fedora 系列 runlevel 代表意義如下:
0:系統關機 (to halt the system) 1:單一使用者模式 (single-user mode) 2:尚未使用(可由使用者定義) 3:多使用者模式 (文字介面登入) 4:尚未使用 (可由使用者定義) 5:多使用者模式 (含有一個X介面的登入畫面) 6:重新開機 (reboot the system) 轉換成 Upstart 的話,就會變成底下
0:系統關機 (to halt the system) 1:單一使用者模式 (single-user mode) 2:多使用者模式 (含有一個X介面的登入畫面) 3:多使用者模式 (含有一個X介面的登入畫面) 4:多使用者模式 (含有一個X介面的登入畫面) 5:多使用者模式 (含有一個X介面的登入畫面) 6:重新開機(reboot the system) 上面資訊可以在 man telinit 裡面找到,寫得很詳細,現在 Ubuntu 9.10 系統,預設啟用是在 runlevel 2,只要執行 runlevle 指令,就可以查出先前跟目前所設定的 runlevel 值,這些數值是存放在 /var/run/utmp,這是一個 UTMP File,你會發現,現在只要安裝好 Ubuntu Desktop 系統,就會自動啟動,所以常常會看到 Linux 使用者會來詢問如何關閉 gdm 桌面程式,其實有很多手動的方式,init 也管理了開機所需執行的程式,如果是跑 runlevel 2,就會去執行 /etc/rc2.d/* 底下所有的 script 檔案,所以大家可以發現會有 /etc/rcX.d/ (X:0,1,2,3,4,5,6,S),其中的 S 代表 single user mode,我們用 rc2.d 底下的檔案來說明:
大家可以看到,每個檔案命名方式:[S|K]\d{2}script_name,S 代表開機會啟動,K 代表開機不啟動,後面接兩位數字,代表開機優先權順序,這些檔案都是利用 Soft link 方式連接到 /etc/init.d/ 底下,所以修改 /etc/init.d/ 資料夾檔案內容,就可以自動更新 /etc/rc[0-6].d/ 檔案,相當方便吧,那該如何產生對應檔案到 /etc/rc[0-6].d/ 資料夾底下,可以利用 update-rc.d 這指令,update-rc.d 是用來產生或移除 init script links,可以參考 Debian Policy Manual。
[Read More]