1、init進程
init進程,是一個由核心啟動的使用者級進程,核心自行啟動後,就通過啟動 init來完成引導進程。所以,init始終是第一個進程(其進程編號始終為1)。init程式位於/sbin/init,如果核心找不到init,就會嘗試運行/bin/sh;
2、運行層級
運行級就 是作業系統當前正在啟動並執行功能層級。這個層級從1到6 ,具有不同的功能。 0 – 停機(千萬不能把initdefault 設定為0 ) 1 – 單一使用者模式 2 – 多使用者,沒有 NFS 3 – 完全多使用者模式(標準的運行級) 4 – 沒有用到 5 – X11 (xwindow) 6 – 重新啟動 (千萬不要把initdefault 設定為6 )
3、inittab檔案
linux系統在/etc/inittab檔案中配置運行層級,供init進程調用。預設首先會啟動位於/etc/rc.d/init.d目錄中的指令碼,這些指令碼被“ln”命令串連到 /etc/rc.d/rcn.d 目錄(啟動n表示0-6的運行層級)。inittab檔案所包含的域具有嚴格的格式。該檔案中每個條目的格式為:
id:rstart:action:process:
其中,id域是相應進程的唯一標識。rstart域所包含的數字表示運行該進程的層級。action域告訴init進程如何對待 process所對應的進程。這裡可以有很多種動作,但是最常見的是wait和respawn,wait意味著當進程啟動後等待它結束,respawn則意 味著如果該進程不存在,則啟動相應的進程,如果它存在,那麼只要它一掉下來就立即重新啟動它。process域包含了實際要啟動並執行命令。
4、rcn目錄
rcn.d目錄中的指令碼都是一些連結,這樣是為了省去不必要的副本。這些連結的格式為:
Snnn.script_name
Knnn.script_name
其 中,
S:代表啟動相應的進程,K:代表殺死相應的進程。nn:是00至99的兩位元字,不過在有些系統中是000至999三位元字。 在不同目錄中的連結應採用同一數字。例如,如果某個服務在rc3.d中啟動時名為S45.myscript,那麼如果希望它在rc2.d中啟動,應當使用 連結名S45.myscript。script_name:相應指令碼的檔案名稱,根據所在作業系統的不同,它們可能位於下列目錄中:/usr/sbin/init.d、/etc/rc.d、/etc/init.d。
當 init進程調用相應的運行層級指令碼時,殺進程按照從高到低的K序號進行,即K23.myscript -> K12.named;而啟動進程按照從低到高的序號進行。
5、自訂啟動服務
建立啟動服務可以通過以下3中方法實現:
1).建立啟動服務指令碼
建立啟動指令碼必須符合以下條件: 編寫該指令碼,確保它符合調用標準。 確信它能夠啟動或終止相應的服務。 將該指令碼放置於(取決於作業系統) /etc/init.d或/usr/sbin/init.d或/etc/rc.d中。 在相應的rcN.d目錄中按照合理的命名方式建立連結。
例如現在將要啟動、停止一個名為rc.audit的服務,該服務運行於層級3,停止於層級6。通過查看rcN.d中的條目,我 們發現序號35空閑,於是就使用該序號(實際上,系統並不對使用已佔用的序號作任何檢查)。
假定該指令碼已經通過了測試,它能夠正確地啟動 和停止。現在我們把該指令碼放置在相應的運行層級目錄中。
在本系統中,rcN.d目錄位於/etc/rc.d目錄下,而我的運行層級指令碼儲存在/etc/rc.d/init.d目錄下(如果系統目錄結構與上面的不同,那麼需要對下面的命令作相應的調整)。
$pwd
/etc/rc.d/rc3.d
$ln -s /init.d/rc.audit S35rc.audit
$ls -l
lrwxrwxrws 1 root root S35rc.audit -> /init.d/rc.audit
$pwd
/etc/rc.d/rc6.d
$ln -s /init.d/rc.audit K35rc.audit
$ls -l
lrwxrwxrwx 1 root root K35rc.audit -> /init.d/rc.audit
2).inittab啟動
我們還可以通過在inittab檔案中加入相應的條目來做到這一點。 首先我確定該指令碼能夠正確運行 對inittab檔案做備份。$ cp /etc/initab /etc/inittab.bak 編輯inittab檔案,在該檔案末尾加入這樣一個條目:rc.audit:3:once:/usr/local/etc/rc.audit,儲存並退出。
上面的一條意思是:
行首的rc.audit是該進程在運行層級3中的唯一標識,該進程只運行一次,所要啟動並執行指令碼是/usr/local/etc/rc.audit。
3).rc.local啟動
如果不想把/etc/inittab檔案弄得過於雜亂,還有其他的方法可以實現啟動和停止服務的功能。大多數系統都含有一個名為rc.local的檔案, 一般來說也是位於/etc目錄下。該指令檔將在inittab和運行層級指令碼之後運行。可以在該檔案中加入任何命令,或從中調用最習慣用的啟動指令碼。有 些系統還在/bin目錄下(更多的是在/usr/sbin目錄下)含有一個名為shutdown的指令檔,可以使用它來關閉某些服務。