【參考】ubuntu配置開機啟動服務
在ubuntu10.04之前的版本都是使用chkconfig來進行管理,而在之後的版本就沒有了,如果想繼續使用chkconfig命令,只好自己apt-get install下了。
- sudo apt-get install chkconfig
在這裡我給大家介紹另兩個命令來配置ubuntu的啟動服務,sysv-rc-conf和update-rc.d
背景知識
1、執行級別:
Linux系統任何時候都執行在一個指定的執行級上,並且不同的執行級程式和服務都不同,所要完成的工作和要達到的目的也不同,系統可以在這些執行級之間進行切換,來完成不同的工作。
執行級別等級:
- 0 系統停機狀態
- 1 單使用者模式,只准許root使用者對系統進系維護
- 2~5 多使用者模式(其中3為字元介面、5為圖形介面)
- 6 重啟啟動
在這裡需要注意的是,在Debian下(ubuntu其中之一)level2~5是沒有任何區別的。
使用以下命令,可以檢視當前的執行級別:
- runlevel
使用以下命令,可以切換執行級別:
- init [123456]
2、啟動步驟:
- 讀取MBR資訊,啟動Boot Manager,Linux通常使用GRUB作為Boot Manager。
- 載入系統核心,啟動init程序。init程序是Linux的根程序,所有的系統程序都是它的子程序。
- init程序讀取/etc/inittab檔案中的資訊,並進入預設的執行級別。在這裡需要說下的是,在ubuntu的6.10版本以後,就沒有了/etc/inittab檔案,是因為inittab已經被update軟體包所取代了,具體的可以檢視/usr/share/doc/update目錄。就不在這裡介紹了。
- 執行/etc/rcS.d/目錄下的指令碼,然後是/etc/rcX.d/目錄下的指令碼,X代表的是數字0~6。rcS.d和rcX.d目錄下的檔案都是以,S或K加上兩位數字組成的,其中S代表start,K代表kill,而兩位數字代表啟動順序,數字越大代表級別越低。
sysv-rc-conf使用
- sudo apt-get install sysv-rc-conf
update-rc.d使用
update-rc.d是一個Perl指令碼,是用來自動升級System V型別初始化指令碼,簡單來說就是哪些東西是你想要在系統引導初始化的時候執行的,哪些是希望在關機或重啟時候停止的,都可以用它來幫你設定。這些指令碼的連線位於/etc/rcX.d/下(X代表0~6),對應指令碼位於/etc/init.d/下。
1、設定啟動項:
update-rc.d <serviceName> start <order> <runlevel>
2、設定停止項:
update-rc.d <serviceName> stop <order> <runlevel>
設定啟動和停止可以寫在一起,例如:
- sudo update-rc.d <serviceName> start 20 1 2 3 4 5 . stop 60 0 6 .
3、從所有的執行級別中刪除制定的啟動項
update-rc.d -f <serviceName> remove
示例
根據上面的介紹,如何將一個軟體安裝為服務也就比較清楚了,那就是在/etc/init.d新增一個服務的啟動指令碼,然後在需要啟動服務的對應級別中/etc/rc[0~6].d按照檔名格式新增一個指向/etc/init.d的指令碼符號連結。
以apache2為例,預設情況下,apache2編譯安裝在/usr/local/apache2,apache2的伺服器啟動指令碼是/usr/local/apache2/bin/apachectl,那麼安裝服務就是要把此apachectl拷貝到需要啟動apache2伺服器的執行級別對應的/etc/rc[0~6].d目錄下,一半來說ubuntu的執行級別為2,所以也就是拷貝到/etc/rc2.d下。
- sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2
- sudo ln -s /etc/init.d/apache2 /etc/rc2.d/S80apache2
這時如果想要停止或重啟apache2也可以使用以下命令:
- service apache2 stop
- service apache2 restart
使用update-rc.d來新增:
- sudo update-rc.d apache2 start 80 2 3 4 5 .
- sudo update-rc.d apache2 stop 80 0 1 6 .
如果不想要這個apache2啟動和停止的服務話,把它remove掉:
- sudo update-rc.d -f apache2 remove
同樣我們也可以使用defaults引數來向執行級別2、3、4、5啟動服務,也就是start,並同時向執行級別0、1、6新增關閉命令,即stop。
- sudo update-rc.d apache2 defaults 80 80
rc.local
在/etc/rc[2~5].d目錄下都會有一個S99rc.local指令碼,這是一個指向/etc/init.d/rc.local的連結,可以看出,在正常的2~5級別啟動的最後都會呼叫這個rc.local指令碼。而/etc/init.d/rc.local中又會檢查是否存在/etc/rc.local,並執行。因此,我們也可以在/etc/rc.local中寫入程式碼,來隨系統啟動某些程式,實現類似服務的功能。
系統的啟動過程
綜上,我們可以看到,系統的啟動呼叫過程如下:
核心 -> /etc/init/rc-sysint.conf -> /etc/inittab -> etc/init.d/rc -> /etc/rc[0~6].d -> /etc/init.d/rc.local ->/etc/rc.local
雖然在ubuntu後來的版本中預設已經沒有了inittab檔案,但我可以自行新增。
以上的啟動過程,並不是代表所有,以Redhat系列的CentOS5為例:
核心 -> /etc/inittab -> /etc/ rc.sysinit (/etc/rc.d/rc.sysinit) -> /etc/rc[?].d (/etc/rc.d/rc[?].d) -> /etc/rc.local(/etc/rc.d/rc.local)