什么是Linux中的systemd?

寫在前面

為什么要回過頭來復習linux的system的,最近在研究DELL EMC的PowerStore存儲系統,其底層是基于CoreOS開發的,這套操作系統是基于Systemd來設計的。所以要深入了解PowerStore就必須對systemd做詳細了解。

systemd 是一個用于 Linux 系統的初始化系統(init system)和服務管理器,旨在取代傳統的 System V init 系統。它不僅負責啟動操作系統,還管理服務、日志、設備、掛載點等系統資源。systemd 由 Lennart Poettering 和 Kay Sievers 等人開發,自 2010 年左右開始被廣泛采用,現已成為許多主流 Linux 發行版(如 RHEL、Ubuntu、Debian、Fedora、Arch Linux 等)的默認初始化系統。

以下是對 systemd 的詳細解釋,包括其概念、功能、組件以及在 Linux 生態中的作用。

1. systemd 的核心概念

定義

  • 初始化系統:systemd 是 Linux 內核啟動后運行的第一個用戶空間進程(PID 1),負責初始化系統、啟動服務并管理整個系統的運行。
  • 服務管理器:它管理系統服務的啟動、停止、重啟、狀態檢查等操作。
  • 系統管理工具:systemd 提供了一套工具,用于管理日志、設備、定時任務、網絡配置等。

設計目標

  • 并行化:加速系統啟動,通過并行啟動服務減少啟動時間。
  • 統一管理:為各種系統資源(如服務、設備、掛載點)提供一致的管理接口。
  • 依賴管理:自動處理服務之間的依賴關系。
  • 現代化支持現代 Linux 特性,如 cgroups、namespace、容器化等。在PowerStore中大量使用docker。
  • 日志集成:通過 systemd-journald 提供結構化的日志管理。所有PowerStore的日志管理都是通過journald來管理的,這個和以前的存儲管理方式是不同的。

核心理念

  • 單元(Units):systemd 將所有管理的資源抽象為“單元”,如服務(.service)、掛載點(.mount)、定時器(.timer)等。
  • 聲明式配置:通過配置文件(通常在 /etc/systemd/ 或 /lib/systemd/)定義單元的行為,而不是傳統的 shell 腳本。
  • 事件驅動:systemd 監控系統事件(如設備插入、服務啟動),動態響應。

2. systemd 的主要功能

  1. 系統初始化
    • 啟動內核后,systemd 作為 PID 1 接管系統,加載必要的服務、文件系統、網絡等。
    • 支持并行啟動服務,優化啟動速度。
    • 示例:啟動后加載 sshd.service、network.target 等。
  2. 服務管理
    • 管理服務的生命周期(啟動、停止、重啟、啟用、禁用)。
    • 使用 systemctl 命令控制服務。
    • 示例:
      systemctl start docker
      systemctl enable sshd
      systemctl status network
  3. 依賴管理
    • 自動解析服務之間的依賴關系(如 docker.service 依賴 network-online.target)。
    • 通過 Wants、Requires、After 等關鍵字定義依賴。
  4. 日志管理
    • 通過 systemd-journald 收集和存儲系統日志,存儲在 /var/log/journal/(持久化)或 /run/log/journal/(內存)。
    • 使用 journalctl 查詢日志。
    • 示例:
      journalctl --unit docker
      journalctl -p err
  5. 設備管理
    • 管理硬件設備(如 USB、磁盤)的掛載和卸載。
    • 使用 .device 和 .mount 單元。
    • 示例:
      systemctl status dev-sda1.device
  6. 定時任務
    • 使用 .timer 單元替代傳統的 cron,提供更靈活的定時任務管理。
    • 示例:
      systemctl list-timers
  7. 資源控制
    • 利用 cgroups 限制服務的 CPU、內存、IO 等資源。
    • 示例:
      systemctl set-property docker.service MemoryLimit=2G
  8. 網絡管理
    • 通過 systemd-networkd 和 systemd-resolved 管理網絡配置和 DNS 解析。
    • 示例:
      networkctl status
  9. 容器和虛擬化支持
    • 通過 systemd-nspawn 提供輕量級容器管理。
    • 支持與 Docker、Podman 等容器技術集成。

3. systemd 的核心組件

systemd 不僅僅是一個單一的程序,而是一套工具和守護進程的集合。主要組件包括:

  1. systemd(主進程):
    • 作為 PID 1 運行,負責初始化和管理單元。
    • 解析 /etc/systemd/system/ 和 /lib/systemd/system/ 中的單元文件。
  2. systemctl
    • 用戶命令行工具,用于管理服務、單元和系統狀態。
    • 示例:
      systemctl restart sshd
      systemctl list-units
  3. journald
    • 日志管理守護進程,收集系統和服務的日志。
    • 存儲結構化日志,支持通過 journalctl 查詢。
    • 示例:
      journalctl -f
  4. logind
    • 管理用戶登錄會話,處理多用戶、多座位環境。
    • 示例:
      loginctl list-sessions
  5. networkd
    • 管理網絡接口和配置。
    • 示例:
      networkctl list
  6. resolved
    • 提供 DNS 解析服務。
    • 示例:
      resolvectl status
  7. timedated
    • 管理系統時間和時區。
    • 示例:
      timedatectl set-timezone Asia/Shanghai
  8. udevd
    • 管理設備事件(如插入 USB 設備)。
    • 示例:
      udevadm monitor

4. systemd 的單元類型

systemd 管理的所有資源都被抽象為“單元”(Units),每種單元有特定的文件后綴。常見單元類型包括:

單元類型

后綴

用途

Service

.service

管理服務(如 sshd、docker)

Target

.target

定義一組單元的集合(如 multi-user.target)

Mount

.mount

管理文件系統掛載點

Device

.device

管理硬件設備

Socket

.socket

管理套接字(如網絡連接)

Timer

.timer

管理定時任務

Path

.path

基于文件系統路徑的觸發器

Slice

.slice

資源控制分組(基于 cgroups)

5. systemd 在 Linux 生態中的地位

普及程度

  • 主流發行版:RHEL(7+)、CentOS(7+)、Ubuntu(16.04+)、Debian(8+)、Fedora、Arch Linux 等默認使用 systemd。
  • 非 systemd 發行版:一些發行版(如 Alpine Linux、Devuan、Void Linux)選擇不使用 systemd,而是使用其他初始化系統(如 OpenRC、runit)。

優勢

  • 性能:并行啟動和依賴管理顯著提高啟動速度。
  • 一致性:為服務、設備、日志等提供統一的接口。
  • 現代化:支持 cgroups、容器、復雜依賴關系。
  • 生態整合:與 journald、networkd 等組件無縫集成。

爭議

  • 復雜性:systemd 功能龐大,被批評為“過于復雜”,違背 Unix 哲學(單一職責)。
  • 兼容性:替換傳統工具(如 cron、inetd),可能導致腳本不兼容。
  • 依賴性:許多軟件開始依賴 systemd,限制了非 systemd 系統的選擇。

與傳統 init 系統的對比

特性

systemd

System V Init

啟動方式

并行啟動

串行啟動

依賴管理

自動解析

手動配置(腳本順序)

日志管理

集成 journald

依賴 syslog(rsyslog 等)

配置方式

聲明式(單元文件)

腳本式(/etc/init.d/)

功能范圍

廣泛(服務、設備、日志等)

僅限服務啟動

復雜性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81697.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 環境下 Mysql 5.7 數據定期備份

目錄 一、創建數據備份腳本二、查看備份日志三、數據庫數據恢復 備份策略: 系統環境 openEuler 22.03 (LTS-SP4) 單機備份 每天凌晨2點,指定數據庫表全量備份,只保留近7次備份數據 每次的腳本執行,將會記錄執行結果到日志&#xf…

C 語言字符輸入:掌握 getchar 和 scanf 的用法與陷阱

各類資料學習下載合集 ??https://pan.quark.cn/s/8c91ccb5a474?? C 語言字符輸入:掌握 getchar 和 scanf 的用法與陷阱 你好!在 C 語言編程中,與用戶進行交互最基本的方式就是通過標準輸入和標準輸出。我們之前探討了如何使用 ??printf?? 和 ??putchar?? 進行…

【React】 Hooks useTransition 解析與性能優化實踐

1.背景 useTransition 是 React 18 引入的一個并發模式下的 Hook,用于區分緊急和非緊急的狀態更新,提升應用的響應性和用戶體驗;它可以管理 UI 中的過渡狀態,特別是在處理長時間運行的狀態更新時。它允許你將某些更新標記為“過渡”狀態&…

蘑菇管理——AI與思維模型【94】

一、定義 蘑菇管理思維模型是一種形象地描述組織對待新員工或初入職場者的管理方式及相關現象的思維模型。它將新員工或初入職場者比作蘑菇,這些人在初期往往被置于陰暗的角落(不受重視的部門,或打雜跑腿的工作),澆上…

c++STL——set和map的使用

文章目錄 set和map的使用set系列聲名和定義默認成員函數迭代器set的增刪查lower_bound和upper_boundInsert接口pair類 對于查找的另一種使用 set和multiset的區別 map系列聲名和定義pair類的進一步介紹默認成員函數map的增刪查map的數據修改map和multimap的差異 set和map的使用…

什么是DGI數據治理框架?

DGI數據治理框架是由數據治理研究所(Data Governance Institute, DGI)提出的一套系統性方法論,旨在幫助企業或組織建立有效的數據治理體系,確保數據資產的高質量管理、合規使用和價值釋放。以下是關于DGI數據治理框架的核心內容&a…

chrome 瀏覽器怎么不自動提示是否翻譯網站

每次訪問外國語網頁都會彈出這個對話框,很是麻煩,每次都得手動關閉一下。 不讓他彈出來方法: 設置》語言》首選語言》添加語言,搜索英語添加上 如果需要使用翻譯,就點擊三個點,然后選擇翻譯

LeetCode 熱題 100 54. 螺旋矩陣

LeetCode 熱題 100 | 54. 螺旋矩陣 大家好,今天我們來解決一道經典的算法題——螺旋矩陣。這道題在LeetCode上被標記為中等難度,要求我們按照順時針螺旋順序返回矩陣中的所有元素。下面我將詳細講解解題思路,并附上Python代碼實現。 問題描述…

生成式AI將重塑的未來工作

在人類文明的長河中,技術革命始終是推動社會進步的核心動力。從蒸汽機的轟鳴到互聯網的浪潮,每一次技術躍遷都在重塑著人類的工作方式與生存形態。而今,生成式人工智能(Generative AI)的崛起,正以超越以往任何時代的速度與深度,叩響未來工作范式變革的大門。這場變革并非…

【2025軟考高級架構師】——2024年05月份真題與解析

摘要 本文內容是關于2025年軟考高級架構師考試的相關資料,包含2024年05月份真題與解析。其中涉及體系結構演化的步驟、OSI協議中能提供安全服務的層次、數據庫設計階段中進行關系反規范化的環節等知識點,還提及了軟考高級架構師考試的多個模塊&#xff…

KAG:通過知識增強生成提升專業領域的大型語言模型(三)

目錄 摘要 Abstract 1 Schema 2 Prompt 3 KAG-Builder 3.1 reader 3.2 splitter 3.3 extractor 3.4 vectorizer 3.5 writer 3.6 可選組件 4 示例 總結 摘要 本周深入學習了 KAG 項目中的 Schema、Prompt 以及 KAG-Builder 相關代碼知識,涵蓋了其定義、…

Gitea windows服務注冊,服務啟動、停止、重啟腳本

修改配置文件 查看COMPUTERNAME echo %COMPUTERNAME%進入配置文件D:\gitea\custom\conf\app.ini,將 Gitea 設置為以本地系統用戶運行 如果結果是 USER-PC,那么 RUN_USER USER-PC$ RUN_USER COMPUTERNAME$SQLite3 PATH配置,更改為包含完整…

礦泉水瓶的繪制

1.制作中心矩形,大小為60,注意設置矩形的兩條邊相等 2.點擊拉伸,高度為150mm 3.使用圓角命令,點擊連接到開始面,同時選中4條邊,進行圓角轉化,圓角大小為10mm,點擊多半徑圓角&#xf…

【程序+論文】大規模新能源并網下的火電機組深度調峰經濟調度

目錄 1 主要內容 講解重點 2 講解視頻及代碼 1 主要內容 該視頻為《大規模新能源并網下的火電機組深度調峰經濟調度》代碼講解內容,該程序有完全對照的論文,以改進IEEE30節點作為研究對象,系統包括5個火電機組和2個新能源機組,…

??工業機器人智能編程:從示教器到AI自主決策??

工業機器人智能編程:從示教器到AI自主決策 引言 工業機器人作為智能制造的核心裝備,其編程方式正經歷革命性變革。傳統示教器編程效率低下,平均每個路徑點需要30秒人工示教,而復雜軌跡編程可能耗時數周。隨著AI技術的發展,工業機器人編程正朝著"所見即所得"的…

n8n 構建一個 ReAct AI Agent 示例

n8n 構建一個 ReAct AI Agent 示例 0. 引言1. 詳細步驟創建一個 "When Executed by Another Workflow"創建一個 "Edit Fields (Set)"再創建一個 "Edit Fields (Set)"創建一個 HTTP Request創建一個 If 節點在 true 分支創建一個 "Edit Fiel…

Monorepo項目多項目一次性啟動工具對比與實踐

Monorepo項目多項目一次性啟動工具對比與實踐 在現代軟件開發中,Monorepo(單一倉庫)模式越來越受到開發者的青睞。Monorepo將多個相關的項目或包集中在一個倉庫中進行管理,方便依賴共享、代碼復用和統一發布。在Monorepo項目開發…

筆記整理六----OSPF協議

OSPF 動態路由的分類: 1.基于網絡范圍進行劃分--將網絡本身劃分為一個個AS(自治系統---方便管理和維護) 內部網關協議---負責AS內部用戶之間互相訪問使用的協議 IGP--RIP EIGRP ISIS OSPF 外部網關協議--負責AS之間(整個互聯網&…

網絡編程,使用select()進行簡單服務端與客戶端通信

這里在Ubuntu環境下演示 一般流程 服務端常用函數: socket():創建一個新的套接字。bind():將套接字與特定的IP地址和端口綁定。listen():使套接字開始監聽傳入的連接請求。accept():接受一個傳入的連接請求&#xff…

智能決策支持系統的基本概念與理論體系

決策支持系統是管理科學的一個分支,原本與人工智能屬于不同的學科范疇,但自20世紀80年代以來,由于專家系統在許多方面取得了成功,于是人們開始考慮把人工智能技術用于計算機管理中來。在用計算機所進行的各種管理中,如…