1. 程式人生 > >Ubuntu init啟動流程分析

Ubuntu init啟動流程分析

啟動時會首先執行/etc/init目錄中配置檔案

配置檔案中可以設定啟動的時機與順序,start on startup,start on runlevel [1234],stop on [!3453]

一般的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級別裡所規定的服務。

所有的執行服務的指令碼儲存在/etc/init.d/裡面。而在/etc/中有rc'X'.d的資料夾,'X'代表0-6和X,也就對應了這8個啟動級別,裡面就都是指向/etc/init.d/裡面執行服務的指令碼的軟連線(symbol link),會發現,軟連線的數目少於執行指令碼數,這就是說不是所有服務都要在一個級別中執行的。軟連線的命名是有規則的:[K|S][0-90-9][name],K代表kill,S代表start,後面是個二位數,最後是對應的執行服務的指令碼檔名。這個名字是在執行相應的指令碼的時候傳遞的引數,K是傳遞stop(就是關閉服務),S是傳遞start(就是啟動服務),執行順序:K小數->K大數->S小數->S大數。這裡注意資料夾裡的所有軟連線都會被執行,


rc'x'.d裡面的軟連線是由/etc/init/rc.conf呼叫的

在ubuntu中,可以使用update-rc.d命令去維護rc,語法為:sudo update-rc.d servicename defaults