ubuntu配置開機啓動服務

在ubuntu10.04之前的版本都是使用chkconfig來進行管理,而在之後的版本就沒有了,如果想繼續使用chkconfig命令,只好自己apt-get install下了。

[plain] view plaincopy
  1. sudo apt-get install chkconfig  

在這裏我給大家介紹另兩個命令來配置ubuntu的啓動服務,sysv-rc-confupdate-rc.d

背景知識

1、運行級別:

Linux系統任何時候都運行在一個指定的運行級上,並且不同的運行級程序和服務都不同,所要完成的工作和要達到的目的也不同,系統可以在這些運行級之間進行切換,來完成不同的工作。

運行級別等級:

  • 0        系統停機狀態
  • 1        單用戶模式,只准許root用戶對系統進系維護
  • 2~5  多用戶模式(其中3爲字符界面、5爲圖形界面)
  • 6         重啓啓動

在這裏需要注意的是,在Debian下(ubuntu其中之一)level2~5是沒有任何區別的。

使用以下命令,可以查看當前的運行級別:

[plain] view plaincopy
  1. runlevel  
runlevel顯示上次的運行級別和當前的運行級別,“N”表示沒有上次的運行級別。

使用以下命令,可以切換運行級別:

[plain] view plaincopy
  1. init [123456]  
例如,init 0表示關機,init 6表示重啓。


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使用

[plain] view plaincopy
  1. sudo apt-get install sysv-rc-conf  
它具有操作簡單,簡潔的操作界面,你可以使用鼠標點擊,也可以使用鍵盤操作,空格鍵代表選擇,“X”表示開啓服務,Ctrl+N下一頁,Ctrl+P上一頁,Q退出。


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>

設置啓動和停止可以寫在一起,例如:

[plain] view plaincopy
  1. 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下。

[plain] view plaincopy
  1. sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2  
如果手動添加的話:

[plain] view plaincopy
  1. sudo ln -s /etc/init.d/apache2 /etc/rc2.d/S80apache2  
重啓服務器後,就可以看到apache2自動啓動了。

這時如果想要停止或重啓apache2也可以使用以下命令:

[plain] view plaincopy
  1. service apache2 stop  
  2. service apache2 restart  

使用update-rc.d來添加:

[plain] view plaincopy
  1. sudo update-rc.d apache2 start 80 2 3 4 5 .  
  2. sudo update-rc.d apache2 stop 80 0 1 6 .  

如果不想要這個apache2啓動和停止的服務話,把它remove掉:

[plain] view plaincopy
  1. sudo update-rc.d -f apache2 remove  
參數-f是強制刪除符號鏈接,即使/etc/init.d/apache2仍然存在。

同樣我們也可以使用defaults參數來向運行級別2、3、4、5啓動服務,也就是start,並同時向運行級別0、1、6添加關閉命令,即stop。

[plain] view plaincopy
  1. sudo update-rc.d apache2 defaults 80 80  
第一個80代表start,第二個80代表stop。

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章