為了讓vidalia啟動tor和polipo,而不是讓他們自己作為服務運行,我瞭解了一番有關ubuntu 的啟動級別,google了一番,讀了點English,再#ubuntu-cn請教了一番,寫下自己的心得, 希望對大家有説明,更希望大牛給斧正。 下面進入正文:
在linux的世界裡,所有的linux作業系統都有一個啟動級別的概念,啟動級別控制著系統啟動後所載入的各種功能的不同,實質是在啟動後運行各種服務(servcie|| daemon)。 這裡的服務是和windows裡的服務的概念相似的,是一種在系統後臺獨立運行的程式,也就是說他一般不予使用者進行交互。
一般的linux分8個級別:0-6和一個'S'級別。 0代表關機(halt),6代表重啟(restart);1-5分別是不同功能的級別,其中1級別是單使用者模式(single),2-5各有不同。 但是在userlinux(包括ubuntu)中2-5級別是毫無差別的。 最後'S'級別是一個比較特殊的級別,他應該是先于其他級別運行的級別。 (這一點有待考證)。 這裡說明一下,0-6級別的運行是互斥的,而不是疊加運行,也就是說如果進入(move into)4級別,不是指0-3都要運行,而只是完成4級別裡所規定的服務。
稍微觀的觀察ubuntu執行層級的完成會發現,所有的運行服務的腳本存儲在/etc/init.d/裡面。 而在/etc/中有rc'X'.d的資料夾,'X'代表0-6和X,也就對應了這8個啟動級別,裡面就都是指向/etc/init.d/裡面運行服務的腳本的軟連接(symbol link),會發現,軟連接的數目少於運行腳本數, 這就是說不是所有服務都要在一個級別中運行的。 軟連接的命名是有規則的:[K| S][0-90-9][HTTP://www.aliyun.com/zixun/aggregation/11696.html">name],K代表kill,S代表start,後面是個二位數, 最後是對應的運行服務的指令檔名。 這個名字是在運行相應的腳本的時候傳遞的參數,K是傳遞stop(就是關閉服務),S是傳遞start(就是啟動服務)。
運行順序:K小數->K大數->S小數->S大數。 這裡注意資料夾裡的所有軟連接都會被執行,不論K或者S。
這裡補充一下,多數的linux都是用一種叫System V的機制來啟動執行層級(好像是循序的,慢? ),而ubuntu是用的另一種機制叫startup(好像是並行的,快? ),所以沒有那個inittab檔改預設執行層級。 ubuntu9.10前好像還能相容inittab,但是9.10開始就不行了,而且9.10裡面設置預設執行層級的檔都和ubuntu之前的版本不同。 ubuntu 9.10 的預設執行層級檔是這個/etc/init/rc-sysinit.conf的14行。
如果想要刪除某個執行層級所要運行的服務,可以把相應rcX.d資料夾裡的軟連接名字的第一個字母小寫(這個是debian的文章推薦的做法,也是bum的做法),也可以刪除這個軟連接(這個是sysv-rc-conf的做法)。 當然自己也可以寫好腳本然後創建軟連接,就可以添加服務了。