systemd 的目標、服務和套接字是什麼?

systemd 的目標、服務和套接字是什麼?

我知道它們都是單元文件,但我無法理解它們的特殊意義。我認為目標類似於守護進程,套接字與套接字(IP + 連接埠)相同,但也具有索引節點號碼。有人可以用簡單的話解釋一下嗎?

答案1

服務單位:

A unit configuration file whose name ends in .service encodes
information about a process controlled and supervised by systemd.

系統服務(5)

Systemd 服務單元是實際執行和追蹤程序和守護程序的單元,依賴項用於確保服務以正確的順序啟動。它們是最常用的單位類型。

插座單元:

A unit configuration file whose name ends in ".socket" encodes
information about an IPC or network socket or a file system FIFO
controlled and supervised by systemd, for socket-based activation.

systemd.socket(5)

另一方面,套接字單元其實並不會自行啟動守護程式。相反,它們只是坐在那裡監聽 IP 位址和連接埠或 UNIX 域套接字,當有東西連接到它時,套接字所屬的守護程序就會啟動,並將連接交給它。

這有助於確保佔用大量資源但很少使用的大型守護程序不會一直運行並佔用資源,而是僅在需要時才啟動。

目標單位:

A unit configuration file whose name ends in ".target" encodes
information about a target unit of systemd, which is used for grouping
units and as well-known synchronization points during start-up.

systemd.目標(5)

目標用於對單元進行分組和排序。它們在某種程度上大致相當於運行級別,因為在不同的目標上啟動不同的服務、套接字和其他單元。與運行級別不同,它們的形式更加自由,您可以輕鬆地為排序單元創建自己的目標,並且目標之間具有依賴性。

例如,multi-user.target是大多數守護程序的分組,並且需要basic.target激活,這意味著分組的所有服務basic.target將先於 中的服務啟動multi-user.target

答案2

對於這樣一個相對較新的專案來說,systemd 的文檔非常出色。首先目標, 從man systemd.target

除了單元提供的通用功能之外,目標單元不提供任何附加功能。它們的存在只是為了透過依賴關係(可用作啟動目標)對單元進行分組,並為單元之間的依賴關係中使用的同步點建立標準化名稱。除此之外,目標單元是經典 SysV init 系統中 SysV 運行等級的更靈活的替代品。

這些「單元組」涵蓋了一系列不同的功能,從basic.target本質上涵蓋了系統啟動,一直到從 dbus、getty、掛載點到交換和計時器的一切。您可以使用 來查看完整清單man systemd.special

服務檔案是運行由 systemd 控制的進程的基本單位。再次,來自man systemd.service

名稱以 .service 結尾的單元設定檔對有關由 systemd 控制和監督的進程的資訊進行編碼。

這些構成了可以啟動、停止、重新啟動、重新載入的守護程式。

最後,插座, 從man systemd.socket

名稱以「.socket」結尾的單元設定檔對有關由 systemd 控制和監督的 IPC 或網路套接字或檔案系統 FIFO 的資訊進行編碼,用於基於套接字的啟動。

它們涵蓋檔案系統或互聯網上的套接字,以及作為傳輸的經典 FIFO。每個套接字單元都有一個相符的服務單元,如果第一個連接進入套接字或 FIFO,服務單元就會啟動。

除了這些man頁面之外,Lennart 的一系列部落格文章也非常值得閱讀,管理員的 systemd,它深入介紹了 systemd 的架構和實現(該系列目前有 20 篇文章)。

相關內容