Ⅰ Linux內核分析-啟動順序、運行級別及開機啟動(七)
Linux內核分析-啟動順序、運行級別及開機啟動一、啟動順序當我們經過BIOS引導,並選擇了Linux作為准備引導的操作系統後,接下來的執行順序如下:
載入並執行內核:
第一個被載入的就是內核,內核在內存中解壓縮後開始運行。
/sbin/init進程:
init進程是第一個被啟動的非內核進程,其進程編號PID總是1。
init進程讀取配置文件/etc/inittab,決定需要啟動的運行級別(Runlevel)。
執行/etc/rc.d/rc.sysinit,進行一系列初始化工作,包括設定PATH、網路配置、啟動swap分區、設定/proc等。
啟動內核模塊:
依據/etc/moles.conf文件或/etc/moles.d目錄下的文件來裝載內核模塊。
執行運行級別目錄rcX.d下的腳本:
執行/etc/rc.d/rc和/etc/rc.d/rcX.d目錄下的腳本,X為預設運行級別。
執行/etc/rc.d/rc.local:
執行用戶自定義啟動腳本,用戶可以把需要設置和啟動的內容放到這里。
/sbin/mingetty /bin/login:
等待用戶登錄。
Linux一般會有7個運行級別,可由init N來切換(init 0為關機,init 6為重啟系統):
要查看當前運行級別,可以用runlevel命令。配置文件/etc/inittab設置了默認的運行級別,例如id:3:initdefault:就設置了默認運行級別為3(完全多用戶模式)。
三、關於/etc/rc.d/init.d目錄運行級別與rcX.d:
在Linux中,每個運行級別可能需要啟動的服務都不同。為了維護方便,在/etc/rc.d子目錄中為每個運行級別建立一個對應的子目錄,命名方法是rcX.d,X代表運行級別的數字。
rcX.d中放的都是符號鏈接,所有真正的啟動腳本放置在/etc/rc.d/init.d下。當前目錄對應的級別需要啟動哪些程序,就為哪些啟動腳本建立一個指向/etc/rc.d/init.d下對應文件的軟鏈。
rcX.d中放置腳本的鏈接命名格式是:S{number}{name}和K{number}{name}。S開始的文件向腳本傳遞start參數,K開始的文件向腳本傳遞stop參數,number決定執行的順序。
將程序控制腳本加入自動啟動:
放在init.d目錄下的控制腳本需要手動執行,如/etc/init.d/mysql start或service mysql start。
如果想要在特定運行級別自動啟動某個服務,可以在對應的rcX.d下創建軟鏈。例如,要讓mysql在運行級別2和3啟動時自動運行,可以給rc2.d和rc3.d下做軟鏈。
Linux提供了一個命令chkconfig,用於簡單設置服務的運行級別。使用語法包括chkconfig [--add][--del][--list][系統服務]或chkconfig [--level <等級代號>][系統服務][on/off/reset]。
例如,設置MySQL伺服器在運行級別3和4上運行,只需三步:
為了確認配置修改成功,可以用list列出服務在不同運行級別的狀態。
注意:每個被chkconfig管理的服務需要在對應的init.d下的腳本加上兩行注釋,第一行告訴chkconfig預設啟動的運行級以及啟動和停止的優先順序,第二行對服務進行描述。這兩行注釋是必須的,否則chkconfig --add會報錯。