1. 程式人生 > >【參考】ubuntu配置開機啟動服務

【參考】ubuntu配置開機啟動服務

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

  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是沒有任何區別的。

使用以下命令,可以檢視當前的執行級別:

  1. runlevel  
runlevel顯示上次的執行級別和當前的執行級別,“N”表示沒有上次的執行級別。

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

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

  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>

設定啟動和停止可以寫在一起,例如:

  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下。

  1. sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2  
如果手動新增的話:
  1. sudo ln -s /etc/init.d/apache2 /etc/rc2.d/S80apache2  
重啟伺服器後,就可以看到apache2自動啟動了。

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

  1. service apache2 stop  
  2. service apache2 restart  

使用update-rc.d來新增:
  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掉:
  1. sudo update-rc.d -f apache2 remove  
引數-f是強制刪除符號連結,即使/etc/init.d/apache2仍然存在。

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

  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)