Linux init.d 是 Linux 系統最早提供的一個腳本管理方法,該方法基於 shell 腳本,通過在 /etc/init.d 目錄下創建相應服務腳本實現服務的啟動、停止和管理。本文將從開機啟動的概念入手,解析 init.d 開機啟動的原理、實現方法和細節,幫助讀者深入理解 Linux 系統的啟動管理方式。
一、init.d 開機啟動原理
init.d 是基於 System V 的 init 管理工具的一種升級版本,該工具用於控制 Linux 系統的啟動進程。在 Linux 系統中,init 進程通常是操作系統啟動的第一個進程,其作用是負責對系統進程進行初始化和管理。init 進程啟動時會執行 /etc/init.d/rcS 腳本,該腳本會載入位於 /etc/rcS.d 目錄下所有以 S 開頭的腳本,這些腳本都是系統的基本服務,它們依次啟動,直到系統準備好進入用戶交互模式。
在 init.d 開機啟動過程中,系統會先執行 /etc/rc.d/rc.sysinit 腳本進行系統初始化設置,然後執行 /etc/rc.d/rc.local 腳本啟動用戶特定的服務。在 init.d 腳本中,每個服務都有一個唯一標識符,系統通過這個標識符來識別每個服務,並控制其啟動、停止和管理。通常情況下,init.d 腳本還會包含各種輔助功能,如檢測進程是否已經啟動、創建日誌文件、設置環境變數等。
二、創建 init.d 服務腳本
在 Linux 系統中,每個服務都需要一個 init.d 腳本文件來實現啟動和停止功能。在創建 init.d 腳本時,需注意以下幾點:
1. 文件命名規範
在 /etc/init.d 目錄下,所有服務腳本通常以服務的名稱命名,並在命名後面加上可執行文件的擴展名。例如,apache2 服務的腳本文件名為 apache2。
2. 文件格式規範
init.d 腳本必須在第一行聲明解釋器類型,一般為 #!/bin/bash 或 #!/bin/sh。腳本文件開頭通常還包括以下注釋信息:
#!/bin/bash
# chkconfig: 2345 90 10
# description: Apache Web Server
其中 chkconfig 參數指定服務在哪幾個運行級別中啟動,數字 2345 表示可以在運行級別 2、3、4 和 5 中啟動、關閉,90 表示啟動順序為 90,停止順序為 10。description 參數用於服務的描述說明。
3. 函數定義規範
init.d 腳本通常包含以下若干函數定義:
start(){ }
stop(){ }
restart(){ }
status(){ }
其中 start() 函數表示服務啟動的方法,stop() 函數表示關閉服務的方法,restart() 函數表示重啟服務的方法,status() 函數表示查詢服務狀態的方法。這些函數都需要根據實際情況在腳本中進行實現。例如:
start(){
echo “Starting Apache Web Server…”
/usr/local/apache2/bin/apachectl start
}
stop(){
echo “Stopping Apache Web Server…”
/usr/local/apache2/bin/apachectl stop
}
三、通過 chkconfig 管理 init.d 服務
chkconfig 是 Linux 系統用於管理服務 init.d 腳本的命令行工具。該工具可以查詢、啟動、停止和管理系統中添加的所有服務。以下是 chkconfig 常用命令:
1. 查詢已開機啟動服務
chkconfig –list
2. 查詢某個服務的啟動狀態
chkconfig –list service
3. 在某個運行級別下設置某個服務的啟動狀態
chkconfig –level 2345 service on
chkconfig –level 2345 service off
4. 啟動、停止、重啟服務
service start service
service stop service
service restart service
5. 在特定時間執行服務
at now + 10 minutes <<< "service service start"
四、實現開機啟動
實現 init.d 開機啟動需要在 /etc/rc.d 目錄下創建對應的啟動鏈接。啟動鏈接是指在 /etc/rc.d/rc?.d 目錄下創建一個以 S 開頭的軟鏈接和一個以 K 開頭的軟鏈接。以 S 開頭的軟鏈接會在指定的運行級別下啟動服務,而以 K 開頭的軟鏈接會在這個運行級別下停止服務。
例如,如果要在運行級別 2,3,4 和 5 下啟動 apache2 服務,需要在 /etc/rc.d/rc2.d、/etc/rc.d/rc3.d、/etc/rc.d/rc4.d 和 /etc/rc.d/rc5.d 目錄下分別創建 S90apache2 和 K10apache2 兩個軟連接。其中 S90apache2 鏈接到 /etc/init.d/apache2 服務腳本,使得系統在對應的運行級別下啟動 apache2 服務,而 K10apache2 鏈接到同一個服務腳本的 stop 函數,使得系統在對應的運行級別下停止 apache2 服務。
ln -s /etc/init.d/apache2 /etc/rc.d/rc2.d/S90apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc3.d/S90apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc4.d/S90apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc5.d/S90apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc2.d/K10apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc3.d/K10apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc4.d/K10apache2 ln -s /etc/init.d/apache2 /etc/rc.d/rc5.d/K10apache2
五、小結
本文從 init.d 開機啟動的原理、創建服務腳本、通過 chkconfig 管理服務、實現開機啟動等多個方面深入闡述了該方法的詳細實現方法和細節。通過了解和掌握 init.d 開機啟動的相關內容,讀者可以更好地理解 Linux 系統啟動管理的工作原理,並在實際工作中更有效地進行系統管理和維護。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/207077.html