1. 程式人生 > >linux開機服務啟動順序詳解

linux開機服務啟動順序詳解

Linux系統中,系統服務的啟動指令碼一般放在/etc/rc.d/init.d目錄下。不同的開機模式,則分別對應到/etc/rc.d/rc0-6.d目錄下,rc0.d –rd6.d 這七個目錄存放著linux在不同執行級別init.d下指令碼的啟停順序,這幾個目錄下檔案的命名形式為:K(S)+ number+service,這些檔案分別連線到service對應指令碼存在的目錄,K表示kill,S表示start,number表示啟停的順序,service自然是指令碼的名稱了。這裡簡單介紹一下linux七個執行級別:


0 、停機
1 、單使用者模式
2 、多使用者無網路模式(很少使用)
3 、完整的多使用者終端模式(無圖形介面)
4 、保留
5 、多使用者帶GUI模式
6 、重啟


一般來說我們將自己的編寫的指令碼放到init.d下時,還需要指令碼的啟動級別和啟動順序。
首先查詢系統的執行級別:runlevel 
先後顯示系統上一次和當前執行級別。如果不存在上一次執行級別,則用N表示。




然後通過chkconfig 命令來設定指令碼的啟動:
1、Chkconfig –add service
2、chkconfig –level (runlevel) service on   runlevel表示該命令獲取的結果
一般通過上述的命令可以確定我們指令碼的執行級別並在下一次重啟的時候指令碼啟動,但是啟動的順序是系統確定的,我們並不能控制,然而在實際的生產環境中我們常常想要自己控制指令碼的啟動順序或者想讓自己的指令碼在某個服務啟動之後啟動,這就需要在編寫的指令碼的時候新增一些設定。


下面是一個簡單的指令碼echo:
#!/bin/bash


echo "Hello,World"


如果需要設定執行級別和啟動順序可將其改寫如下:


#!/bin/bash


# chkconfig: 2345 30 90
# description: echo info at boot time


### BEGIN INIT INFO
# Provides: echo
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: run level
# Default-Stop:
# Short-Description:
# Description:
### END INIT INFO


echo "Hello,World"


後面這個指令碼通過第一部分chkconfig和description確定了指令碼的執行級別和啟停順序,2345表示在指令碼在系統2345級別執行,016級別停止,啟動順序30,停止順序90。
第二個部分從GEGIN INIT 開始到END INIT 結束,這個部分是根據Linux標準規範編寫的,主要功能是限定指令碼啟停級別和依賴關係。Required-Start表示在啟動該指令碼前的必須條件
Should-Start表示啟動指令碼前應該具備某些條件,但不做硬性要求。Default-Start表示在那些執行級別啟動,剩下的引數大多一眼就能看出具體含義,就不一一介紹了。
改完指令碼後執行 chkconfig --add echo(指令碼名)
完成上述步驟後腳本就能在系統啟動時按照你的意願來啟動了,實際上新增的兩個部分可以拆開單獨用,第一部分不能控制依賴關係,第二部分不能控制啟停順序,而會根據依賴關係
將順序設定為依賴條件的後面,這點很好理解。chkconfig  --add echo將指令碼連線到各個級別的啟動目錄下。
總結:系統指令碼的啟動順序一般在rcx.d下有記錄,init的啟動方式是線性的,所有待啟動的指令碼排好順序,然後init順序執行。現在系統服務使用systemd啟動,建議多瞭解systemd,其功能更加豐富,操作
更靈活。