有時候我們需要Linux系統在開機的時候自動載入某些指令碼或系統服務,主要用三種方式進行這一操作:
- ln -s 在/etc/rc.d/rc*.d目錄中建立/etc/init.d/服務的軟連結(*代表0~6七個運行層級之一)
- chkonfig 命令列運行層級設定
- ntsysv 偽圖形運行層級設定
注意:
- 這三種方式主要用於以redhat為基礎的發行版
- 如果還不知道運行層級是什麼,那麼最好先看看相關資料再實驗
第一種方式:ln -s 建立啟動軟串連
在Linux中有7種運行層級(可在/etc/inittab檔案設定),每種運行層級分別對應著/etc/rc.d/rc[0~6].d這7個目錄:
Tips:/etc/rc[0~6].d其實是/etc/rc.d/rc[0~6].d的軟串連,主要是為了保持和Unix的相容性才做此策。
這7個目錄中,每個目錄分別存放著對應運行層級載入時需要關閉或啟動的服務,由詳細資料可以知道,其實每個指令檔都對應著/etc/init.d/目錄下具體的服務。
K開頭的指令檔代表運行層級載入時需要關閉的,S開頭的代表需要執行:
因此,當我們需要開機啟動自己的指令碼時,只需要將可執行指令碼丟在/etc/init.d目錄下,然後在/etc/rc.d/rc*.d中建立軟連結即可:
[root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此處sshd是具體服務的指令檔,S100ssh是其軟連結,S開頭代表載入時自啟動。
如果需要在多個運行層級下設定自啟動,則需建立多個軟連結,這種方式比較繁瑣,適用於自訂的服務指令碼。
如果系統中已經存在某些服務(比如安裝apache時就會有httpd服務項),可以使用下面的兩種方式:
第二種方式:chkconfig
如果需要自啟動某些服務,只需使用chkconfig 服務名 on即可,若想關閉,將on改為off。
在預設情況下,chkconfig會自啟動2345這四個層級,如果想自訂可以加上--level選項:
上面我們先將sshd服務的所有啟動層級關閉,然後使用--level選項啟動自訂層級;
Tips:--list選項可查看指定服務的啟動狀態,chkconfig不帶任何選項則查看所有服務狀態。
第三種方式:ntsysv 偽圖形
ntsysv和chkconfig其實是一樣的,只不過加上了圖形而已;
啟動ntsysv有兩種方式,一是直接在命令列中輸入ntsysv,二是使用setup命令,然後選擇系統服務:
預設情況下,當前運行層級為多少,在ntsysv中設定的啟動服務的層級便是多少,比如,我當前的運行層級是3,那麼我在偽圖形介面中選擇啟動服務後,它的運行層級也會是3。
如果想自訂運行層級可使用ntsysv --level方式:
以上三種操作需要保證服務指令檔可執行,並且要有root許可權,其中,第一種方式多用於自訂指令碼,第二、三種多用於系統已存在的服務,比如ftp、samba、ssh、httpd等等,並且,要做相關設定需要弄清楚運行層級的問題。
Tips:如果想手動啟動某服務,傳統的方式是 /etc/init.d 服務名 start。
實際上還可以這樣,service 服務名 start: