Systemd
Systemd#
系統嘅第一個進程,進程號為 1。
但當我哋想顯示詳細信息嘅時候,結果會有啲唔同。
其實呢兩個進程係一樣嘅,因為 init
指向嘅係 systemd
。
init
係 Unix 最早嘅初始化進程,由於 systemd
取代咗 init
,
為咗兼容性,/sbin/init
通常係一個指向 systemd
嘅軟鏈接。
名稱後面加 d
係 Unix 守護進程嘅命名規範,System D 係一個術語,
表示快速思考同解決問題嘅能力。systemd
誕生於 2010 年,之前用嘅係 SysVinit。
SysVinit#
Unix System V 呢種初始化方法依家已經唔多用,但喺一啲舊嘅發行版中仲可以見到。
runlevel#
runlevel 亦係呢個 SysVinit 嘅產物。
5 對應 graphical.target
,N 表示上一次嘅 runlevel 為 No。
阿里雲嘅 Ubuntu 默認目標為 graphical.target
,
呢個係為咗方便用戶使用圖形界面(VNC)嚟管理操作系統,
唔需要嘅話可以把目標換成 multi-user.target
。
/etc/rcX.d#
rc 係 run commands 嘅縮寫,.d
係目錄嘅意思,目的是為咗避免命名衝突。
呢個目錄包含咗特定運行級下啟動嘅進程,例如運行級 5 對應 /etc/rc5.d
。
雖然依家使用嘅係 systemd
,但為咗兼容性,呢啲目錄同腳本仍然保留住。
Unit Files#
單元文件係 systemd 嘅配置文件,用嚟定義同管理系統服務、設備、掛載點、套接字同其他系統資源。
每個單元文件都描述咗 systemd 點樣啟動、停止同監視相關資源。
基本分類#
類型 | 描述 | 擴展名 |
---|
服務單元 | 系統服務 | .service |
掛載單元 | 文件系統掛載點 | .mount |
設備單元 | 定義設備 | .device |
套接字單元 | 套接字服務 | .socket |
計時器單元 | 定時任務 | .timer |
目標單元 | 系統目標狀態 | .target |
所在目錄#
/etc/systemd/system/
:系統管理員定義嘅單元文件。/usr/lib/systemd/system/
:發行版提供嘅單元文件。/run/systemd/system/
:運行時生成嘅單元文件。
Nginx 狀態#
可以透過 Nginx 嘅狀態查看服務嘅單元文件路徑。
Nginx 單元文件#
Nginx 服務嘅單元文件有好幾個路徑,第一個係軟鏈接。
第二第三個係硬鏈接,佢哋嘅 inode 係一樣嘅,並且 /lib
係指向 /usr/lib
嘅軟鏈接。
下面係單元文件嘅內容。
常用命令#
systemctl start [unit]
:啟動單元。systemctl stop [unit]
:停止單元。systemctl enable [unit]
:啟用單元,使其喺引導時自動啟動。systemctl disable [unit]
:禁用單元。systemctl status [unit]
:查看單元狀態。systemctl daemon-reload
:喺修改或添加單元文件後重新加載 systemd 配置。
Targets#
從上面可以看到,target 係一種單元文件嘅類型,同一般單元文件不同,佢代表嘅係系統當前嘅運行狀態,
target 定義咗該狀態下需要啟動哪些進程同服務,所以 target 可以包含多個單元文件。
用下面嘅命令可以查看當前系統嘅 target。
multi-user.target#
target 文件通常存儲喺 /usr/lib/systemd/system/
或 /etc/systemd/system/
目錄中。
每個 target 文件都包含關於該 target 嘅依賴關系同啟動順序嘅信息。
我哋可以睇下 multi-user.target
呢個文件內容。
下面兩個目錄包含咗 multi-user.target
狀態所需要嘅內容。
/etc
係用戶定義配置,/lib
係系統默認配置。- 用戶定義配置:優先級更高,同一服務 systemd 會優先執行。
- 系統默認配置:系統或軟件包更新時,會隨之更新。
常用命令#
設置默認 target:
切換到指定 target:
查看可用 targets: