linux內(nèi)核啟動過程,啟動先要加載init進程(即1號進程),然后是按運行級別去執(zhí)行相關(guān)腳本和配置。相關(guān)的腳本和配置就放在init.d目錄里。接下來就先從init.d目錄開始。
一、 關(guān)于/etc/init.d
init.d目錄包含許多系統(tǒng)各種服務(wù)的啟動和停止腳本。當你查看/etc目錄時,你會發(fā)現(xiàn)許多rc#.d 形式存在的目錄(這里#代表一個指定的初始化級別,范圍是0~6/S)。在這些目錄之下,包含了許多對進程進行控制的腳本。這些腳本要么以"K"開頭,要么以"S"開頭。以K開頭的腳本運行在以S開頭的腳本之前。這些腳本放置的地方,將決定這些腳本什么時候開始運行。在這些目錄之間,系統(tǒng)服務(wù)一起合作,就像運行狀況良好的機器一樣。然而,有時候你希望能在不使用kill 或killall 命令的情況下,能干凈的啟動或殺死一個進程。這就是/etc/init.d能夠派上用場的地方了!
對于Fedora系統(tǒng),init.d目錄放于:/etc/rc.d/init.d。實際上無論init.d放在什么地方,它都發(fā)揮著相同的作用。
使用init.d目錄下的腳本,都將被作為一個命令運行,該命令的結(jié)構(gòu)大致如下所示:
/etc/init.d/command 選項
comand是實際運行的命令,選項可以有如下幾種:
- start
- stop
- reload
- restart
- force-reload
大多數(shù)的情況下,你會使用start,stop,restart選項。例如,如果你想關(guān)閉網(wǎng)絡(luò),你可以使用如下形式的命令:
/etc/init.d/networking stop
又比如,你改變了網(wǎng)絡(luò)設(shè)置,并且需要重啟網(wǎng)絡(luò)。你可以使用如下命令:
/etc/init.d/networking restart
二、關(guān)于/etc/rc.local
rc.local是在系統(tǒng)初始化級別腳本運行之后再執(zhí)行的,因此可以安全地在里面添加你想在系統(tǒng)啟動之后執(zhí)行的腳本。/etc/rc.local 是寫到/etc/init.d/S99連接過去的
三、關(guān)于/etc/profile
/etc/profile文件只在登陸用戶后,才會執(zhí)行。并且每個用戶登陸,都會進行一次。因此,可在這里設(shè)置一些用戶日常操作所需的環(huán)境變量,就省得每次開機登陸都需要設(shè)置了。那么對于想開機自啟動的任務(wù)就不要放這邊了,因為用戶一旦沒登陸,任務(wù)也就不會自動啟動了。
開機自啟動腳本示例
(看一下inittab里initlevel設(shè)定后最先跑的是什么腳本)
在了解文件系統(tǒng)的大概啟動配置流程后,現(xiàn)在想為定制的arm-linux系統(tǒng)添加開機自啟動任務(wù)。
1.在/etc/rc.local中添加
$ vim /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
/home/root/test.sh
保存并退出;
再重啟動測試下,則在其它的程序都啟動完成后,將啟動腳本;
2.在init.d中添加
1.創(chuàng)建腳本
$ sudo touch /etc/init.d/test.sh
$ sudo chmod x /etc/init.d/test.sh
- 創(chuàng)建符號連接:
$ cd /etc
下面有這么幾個目錄值得注意:
rcS.d rc0.d rc1.d ... rc6.d ,
(0,1... 6 代表啟動級別 0代表停止,1代表單用戶模式,2-5代表多用戶模式,6代表重啟)
這里,我們將腳本鏈接放到 rcS.d,然后修改文件名,給它一個啟動序號,
如:
S66test.sh
ln -s /etc/init.d/test.sh S66test.sh
到這里自啟動腳本制作已經(jīng)完成了,接下來測試下設(shè)置是否有效。
還有種更優(yōu)雅的方式,將啟動腳本放到相應(yīng)的啟動級別下面:
具體作法:
step1: 先把 test.sh 放到 /etc/init.d目錄下
step2: 查看當前系統(tǒng)的啟動級別
sudo runlevel
N 5
step3: 設(shè)定啟動級別
$ update-rc.d test.sh start 66 2 .
66 為啟動序號,
2是系統(tǒng)的運行級別,可自己調(diào)整,
注意不要忘了結(jié)尾的句點。
現(xiàn)在我們到 /etc/rc2.d 下,就多了一個 S66test.sh 這樣的符號鏈接。