FW: 關於Ubuntu運行級別、開機啓動腳本的說明 rcS.d / rcN.d

關於Ubuntu運行級別、開機啓動腳本的說明

目錄簡介

1.1介紹Ubuntu下面的自啓動腳本目錄

1.2 Linux操作系統運行級別的概念

1.3關於操作系統自啓腳本的啓動順序

1.4    Linux操作系統運行級別的概念

1.5 自啓和關閉自啓服務

1.6 對於init [number]命令

Content:

1.1 介紹Ubuntu操作系統關於自啓動腳本的幾個目錄

其中rc0.d~rc.6.d文件夾下分別對應的是操作系統0-6級運行的狀態下需要執行的腳本。此外還有rcS.d文件夾和rc.local文件,而在這些文件夾下的文件,都是軟鏈文件,指向指定位置的腳本,有圖爲證:

       經查看,發現這些軟鏈都是指向同一個文件夾../init.d/的腳本文件,

我們查看其它的文件夾,發現情況都是這樣子。因此所有開機自啓動的腳本文件都是放在/etc/init.d/目錄下面的:

 

那麼這些rcN.d分別代表什麼意義?或者是說是不是按照0~6的順序依次運行?肯定不是。因爲我們查看rc0.d folder

發現,在該文件夾下,居然有halt(關機)腳本,因此開啓操作系統的時候,肯定不可能執行這個。因此證明rcN.d這幾個folders之間是相互獨立的,沒有什麼本質的聯繫。

       那麼爲什麼會有這幾個文件夾的區別呢?這就引入了linux操作系統的運行級別(run-level)概念。

1.2 Linux操作系統運行級別的概念

       根據前面學習的內容,我們知道有rc0~6在加 rcS.d & rc.local,後面這兩個我們先不看,至少存在0-6共七種運行級別。這裏的運行級別的概念被稱爲System V的運行機制。這七種運行級別的含義如下(僅僅針對Ubuntu,其他系統定義可能不完全一樣):

我們可以通過runlevel查看當前系統的運行狀態

 

 

也就是說我們系統的運行級別目前是2,該參數的配置文件/etc/init/rc-sysinit.conf

 

因此我們開機自啓動的腳本在rc2.d文件夾下,所有的軟鏈指向/etc/init.d/中的腳本文件:

 

這些就是我們默認開機狀態下,要啓動的服務,如果我們將自己的腳本放在/etc/init.d/目錄下,同時在rcN.d中創建軟鏈,指向該文件(軟鏈的名稱應該是S<num><service name>,便可以開機自啓這些服務。同時我們還可以修改配置文件/etc/init/rc-sysinit.conf中的DEFAULT_RUNLEVEL的值,修改操作系統默認的運行級別。

1.3 關於操作系統自啓腳本的啓動順序

       假設我們的操作系統運行級別是2,那麼在/etc/rc2.d/文件夾下的腳本執行順序是怎樣的?因爲有些服務需要先啓動,有些服務需要後啓動,他們之間存在先後關係,即有向圖的關係。

       我們查看該文件夾下的軟鏈名稱(見上圖),軟鏈的名稱有一定的規則:

       S[number][service name] --> ../init.d/servicename

       S 表示 Start,開啓服務

       [number]表示的是該腳本的運行優先級,number越小,腳本的運行優先級就越高

       [service name]表示的是服務的名稱。

       因此我們如果需要定義一個服務啓動的優先級(順序),則需指定腳本的number即可。

      

       根據此規則,我們查看rc6.c文件夾(重啓運行級別):

按照number的順序,顯示Kill服務,之後再Start一些服務,最後重新啓動S90reboot.

1.4 關於rcS.d rc.local文件夾的意義

該腳本是在rc0~6.d文件夾下的腳本執行之前執行rcS.d文件夾下的腳本命令。

1.5 自啓和關閉自啓服務

       在理解了自啓服務的原理之後,我們可以手動添加腳本鏈接文件到指定的rcN.d目錄下,但是這種純手工的方式比較複雜,因此我們可以使用簡單的命令來實現這種功能,或者是指定的工具來實現。

       命令版本# update-rc.d來自動實現System V 的RunLevel的啓動腳本服務,前提是這些服務的啓動腳本位於/etc/init.d/目錄下。

       update-rc.d <service name> start|stop| <order number> <run levels>

       eg:

              sudo update-rc.d rinetd start 20 2

              sudo update-rc.d rinetd stop 20 0

 

       update-rc.d <service name> enable|disable  <runlevels> # 開啓或者是禁止

       eg:

              sudo update-rc.d rinetd disable 2 在runlevel2中暫時禁止該服務

 

       update-rc.d <service name> default [NN | SS KK]

       eg:

              sudo update-rc.d rinetd default 80 80  # default 表示在2 3 4 5 中添加80(the first 80)順序的Start,在0 6 中添加80(the second 80)順序的Kill服務

      

       注意實現去對應的文件夾查看該服務的ordernumber

       從啓動裏面刪除

       sudo update-rc.d -f <service name> remove

       這樣在所有的運行級別中就會刪除掉關於該service的自啓和關閉服務鏈接(刪除的僅僅是鏈接,而不是/etc/init.d/文件夾中的腳本文件)

1.6 對於init [number]命令

  我們在命令行中關閉操作系統或者是重新啓動,使用的是

 

 

 

       在本質上調用的是:

       

      

 

      

       rc0.d 表示的關機 rc6.d表示的是重新啓動

       因此我們還可以在不重新啓動操作系統的前提下,切換操作系統的RunLevel

       sudo init <num>

GuangZhou 2016-8-6 

 

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