Sys V init 啟動方式
Linux 使用的是基於運行級(run-levels) 概念的稱為 SysVinit 的專用啟動工具。 它在不同的系統上可能是完全不一樣的, 所以不能認為一個腳本在某個 Linux 發行版上工作正常。
System V init的主要思想是定義了不同的"運行級別(runlevel)"。通過配置文件/etc/inittab定義了系統引導時的運行級別, 進入或者切換到一個運行級別時做什麼。每個運行級別對應於一個子目錄/etc/rc.d/rcX.d。
在etc/inittab中action為sysinit的一行會給初始化腳本傳入一個參數,一般為一數字,例如:
si::sysinit:/etc/rc.d/init.d/rc 5
rc腳本會合成 /etc/rc.d / rc5.d目錄,其中5是傳入的參數,並執行其中的腳本來開關服務。
SysVinit(從現在開始我們稱之為"init")以運行級的模式來工作,一般有 7 (從 0 到 6)個運行級 (實際上可以有更多的運行級,但都是用於特殊情況而且一般使用不到。 參見 init(8)以獲得更多信息),每個運行級對應於一套設定好的任務, 當啟動一個運行級的時候, 計算機就需要執行相應的任務。 默認的運行級是 3,下面是對不同運行級的描述:
0: 關閉計算機
1: 單用戶模式
2: 無網絡多用戶模式
3: 有網絡多用戶模式
4: 保留作自定義,否則同運行級 3
5: 同運行級 4,一般用於圖形界面(GUI)登錄(如 X的 xdm 或 KDE的 kdm)
6: 重啟動計算機
用來改變運行級別的命令是init
在 /etc/rc.d 目錄下有很多類似 rc?.d (這裡 ? 是運行級別的數值) 和 rcsysinit.d 的目錄, 裡面都包含許多符號鏈接,其中一些以 K 字母開頭,另外一些以 S 字母開頭, 這些鏈接名在首字母後面都跟著兩個數字。 這個 K 的含義是停止 (kill) 一個服務, S 的含義是啟動一個服務。而數字則確定這些腳本的啟動順序,從 00 到 99(數字越小執行的越早)。 當 init 轉換到其它運行級時, 一些相應的服務會停止, 而另一些服務則會啟動。
真正的腳本在 /etc/rc.d/init.d 目錄下, 它們完成實際工作, 符號鏈接都是指向它們的。 停止腳本的鏈接和啟動腳本的鏈接都指向 /etc/rc.d/init.d 目錄下的同一個腳本。 這是因為調用這些腳本時可以使用不同的參數,例如 start, stop, restart, reload, 和 status。 當調用 K 鏈接時,相應的腳本用 stop參數運行;當調用 S 鏈接時,相應的腳本用start 參數運行。
上面的說明有一個例外,在 rc0.d 和 rc6.d 目錄下以 S 開頭的鏈接不會啟動任何東西, 而是用stop參數調用, 來停止某些服務。 這背後的邏輯是, 當用戶要重啟或關閉系統的時候, 不會要啟動什麼服務, 只會要系統停止。
以下是腳本參數的描述:
start
啟動服務。
stop
停止服務。
restart
關閉服務,然後再啟動。
reload
該服務的配置已更新。如果修改了某個服務的配置文件,又不必重啟這個服務的時候, 可以使用這個參數
status
顯示服務的狀態,如果服務正在運行,會顯示該服務進程的 PID 。