一、init 和運行級別
接觸過 linux 的朋友應該都了解到,傳統的 init 定義了 7 個運行級(run level),例如 0 級是
關閉系統、2 級進入是多用戶字符界面、5 級是進入圖形界面等等。
/etc/inittab 文件規定了系統進入到每一個運行級時需要運行的命令,在機器引導時,init 從運
行級別 0 級開始,一級一級地往上運行到在/etc/inittab 文件中所設置的默認運行級別。
修改系統的默認運行級別:
#vi /etc/inittab
找到以下字段
id:5:initdefault:
//編輯 inittab 文件
//可見默認的運行級為 5,即在系統引導時直接進入圖形界面,我們可以
通過修改這個數字自定義系統引導的默認運行級
二、認識服務啟動腳本
本人博客前面的一篇文章曾經介紹過將如何編寫和配置一個新的服務啟動腳本(詳細見 linux 下
將某個應用(軟件)配置成系統服務),簡單帶過了啟動腳本這個概念,這裡再次詳細說明一下。
/etc/init.d/裡存放了所有的啟動腳本,我們平時可以通過/etc/init.d/腳本名 啟動模式 來啟動
某個應用。
例如輸入命令“/etc/init.d/smb start”來啟動 smb 服務。
如果是在 RedHat 系統下,還可以通過 service smb start 來啟動某個服務。
盡管/etc/init.d 目錄中的腳本可以啟動和停止各個服務,但在系統引導時,init 並不是直接在
/etc/init.d 目錄下找各個服務的啟動腳本,而是在/etc/rc.d/目錄下查找,該目錄包含 rc0.d、
rc1.d 等分別代表不同的 init 啟動級別的子目錄,各個子目錄中包含對應啟動級別的啟動腳本,
如圖所示:
啟動腳本1
接著來看看這些 rcx.d 的目錄下所包含的內容,內容全是一些符號鏈接,鏈接到上一級 init 目
錄中的腳本上。
這些符號鏈接名稱都以 S 或 K 開頭,後面跟一個數字以及該腳本所控制的服務名,例如
S10network。
當 init 從低的運行級向高的運行級過渡時,它按照數字遞增的順序運行所有以 S 開頭的腳本,
S=start,即啟動腳本對應的服務;K=kill,即殺死腳本對應服務
首先來看系統默認的運行級別 init5(即開機直接引導至圖形化界面)對應的腳本目錄 rc5.d,
如圖:
啟動腳本2
rc5.d 目錄裡既有 K 腳本,也有 S 腳本,當系統啟動時,init 會按這些符號鏈接的數字順序啟動
所有 S 開通的腳本,當系統關閉時,init 也會按順序關閉所有腳本對應的應用。
可以看到這些符號鏈接實際上全是指向了init.d目錄下啟動腳本:
啟動腳本3
啟動腳本4
現在回頭看看 rc0.d(即關閉系統)目錄下的內容:
啟動腳本5
可以看到 rc0.d 目錄下全部 K 開頭的符號鏈接,當我們輸入命令 init 0 時所有系統服務都會被
關閉。
其他 rcx.d 目錄內容大同小異,都是一些指向啟動腳本的符號鏈接,只是根據不同的運行級別放
置了不同的啟動腳本符號鏈接。
三、自定義啟動服務的順序
前面介紹到 rcx.d 目錄下指向啟動腳本的符號鏈接是由 K 或 S+數字+服務名 所組成,中間這
個數字十分重要,系統啟動時按照這個數字遞增執行所有 S 開頭的腳本,系統關閉時按照這個
數字遞減執行所有 K 開頭的腳本。
知道了這點,我們就可以根據自己的需求控制啟動服務的順序。
如何自定義符號鏈接?
啟動腳本:
#ln -s /etc/init.d/smb S60smb //重新定義 smb 服務的腳本啟動順序
如圖:
啟動腳本6
啟動腳本7
關閉腳本:
#ln -s /etc/init.d/smb K60smb //和啟動腳本基本一樣,S 改成
linux 開機自動啟動腳本方法 1、相關基礎知識點
1)redhat 的啟動方式和執行次序是
加載
執行 init 程
/etc/rc.d/rc.sysinit # 由 init 執行的第一個腳本/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL
缺省的運行模式/etc/rc.d/rc.local #相應級別服務啟動之後、在執行該文件(其實也可
把需要執行的命令寫到該文件中)
/sbin/mingetty #等待用戶登錄
在 Redhat 中,/etc/rc.d/rc.sysinit 主要做在各個運行模式中相同的初始化工作,包括:調入keymap 以及系統字體
啟動 swapping
設置主機名
設置 NIS 域名
檢查(fsck)並 mount 文件系統
打開 quota
裝載聲卡模塊
設置系統時鐘
等等。
/etc/rc.d/rc 則根據其參數指定的運行模式(運行級別,你在 inittab 文件中可以設置)來執
行相應目錄下的腳本。凡是以 Kxx 開頭的,都以 stop 為參數來調用;凡是以 Sxx 開頭的,
都以 start 為參數來調用。調用的順序按 xx 從小到大來執行。(其中 xx 是數字、表示的是啟
動順序)例如,假設缺省的運行模式是 3,/etc/rc.d/rc 就會按上述方式調用/etc/rc.d/rc3.d/下的
腳本。值得一提的是,Redhat 中的運行模式 2、3、5 都把/etc/rc.d/rc.local 做為初始化腳本中的
最後一個,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之後,登錄之前
執行的命令。
init 在等待/etc/rc.d/rc 執行完畢之後(因為在/etc/inittab 中/etc/rc.d/rc 的 action 是 wait),
將在指定的各個虛擬終端上運行/sbin/mingetty,等待用戶的登錄。
至此,LINUX 的啟動結束。
2)init 運行級別及指令
一、什麼是 INIT:
init 是 Linux 系統操作中不可缺少的程序之一。
所謂的 init 進程,它是一個由內核啟動的用戶級進程。
內核自行啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結
構等)之後,就通過啟動一個用戶級程序 init 的方式,完成引導進程。所以,init 始終是第一
個進程(其進程編號始終為 1)。
內核會在過去曾使用過 init 的幾個地方查找它,它的正確位置(對 Linux 系統來說)是