揭秘 systemd:釋放 Linux 服務管理的力量【systemd 一】

🎏:你只管努力,剩下的交給時間

🏠 :小破站

揭秘 systemd:釋放 Linux 服務管理的力量【systemd 一】

  • 前言
  • 第一:systemd簡介
  • 第二:核心概念解析
  • 第三:服務管理與啟動過程
  • 第四:定時任務與定時器
    • 定時任務和定時器的概念:
    • 配置實例:
      • 1. 創建一個定時器單元文件:
      • 2. 創建一個關聯的服務單元文件:
      • 3. 啟用和啟動定時器:
      • 4. 檢查定時器狀態和日志:
  • 第五:日志管理與Journal
    • 作用和功能:
    • 使用journalctl命令演示:

前言

在Linux世界中,systemd是一個備受爭議但又強大的工具。它負責啟動、管理和監控系統上的服務,是現代Linux發行版的標配。本文將帶你走進systemd的奇妙世界,解開它的神秘面紗,幫助你更好地理解和利用這一關鍵的系統管理工具。

第一:systemd簡介

systemd是一個用于Linux操作系統的系統和服務管理器,它起源于2003年,由德國的開發者Lennart Poettering和Kay Sievers共同創建。它的設計理念主要是為了解決傳統的SysV初始化系統的一些問題,并提供更先進、可靠且并行的系統初始化和服務管理。

一些systemd的設計特點包括:

  1. 并行啟動: systemd采用并行啟動的方式,可以同時啟動多個系統服務,提高系統啟動速度。相比之下,傳統的SysV初始化系統是逐個啟動服務的,可能導致啟動時間較長。

  2. Socket激活: systemd引入了Socket激活的概念,可以在需要時動態啟動服務。這有助于減少資源占用,因為服務只在需要時才會啟動,而不是在系統啟動時就一次性啟動所有服務。

  3. 更好的日志管理: systemd引入了Journal日志系統,用于更好地管理系統日志。這使得管理員能夠更容易地檢查和分析系統的運行狀況。

  4. Cgroups支持: systemd使用Linux內核的Cgroups(控制組)功能,提供了更強大的進程管理和資源控制能力。這對于容器化和虛擬化等現代計算環境非常重要。

  5. 單一二進制文件: systemd采用了單一的二進制文件,這使得它更容易維護和升級。

在現代Linux系統中,systemd已經成為許多主流發行版的默認初始化系統,包括但不限于Ubuntu、Fedora、CentOS等。它的引入使得系統管理更加方便,提高了系統的啟動速度和可靠性,同時為新興技術和特性提供了良好的支持,如容器化、動態設備管理等。

需要注意的是,systemd的引入也引起了一些爭議,因為一些人認為它過于龐大和復雜,與Unix哲學不符。然而,它的優點在于為系統管理員提供了更多的控制權和現代特性。

第二:核心概念解析

systemd引入了一些核心概念,這些概念構建了系統的管理框架。以下是對一些核心概念的詳細解析:

  1. 單元(Units):

    • 單元是systemd管理的基本單元,代表了系統中的一個資源或任務。這可以是一個服務、一個設備、一個掛載點等。每個單元都有一個對應的配置文件,描述了如何管理和配置該單元。
    • 例子:service單元表示一個服務,device單元表示一個設備。
  2. 目標(Targets):

    • 目標是一組相關的單元的集合,定義了系統的狀態。它可以是一個基本目標,例如啟動時的基本目標(basic.target),也可以是一個更高級別的目標,例如圖形用戶界面(graphical.target)。
    • 通過將多個單元組合成目標,可以方便地定義不同的系統運行級別或操作模式。
    • 例子:multi-user.target定義了多用戶文本模式下的系統目標,graphical.target定義了圖形用戶界面模式下的系統目標。
  3. 服務(Services):

    • 服務是systemd中一個重要的概念,代表著在系統上運行的一個后臺進程或守護進程。服務單元描述了如何啟動、停止、重啟和管理這些服務。
    • 例子:一個httpd.service單元可能表示一個Apache HTTP服務器的服務。
  4. 套接字激活(Socket Activation):

    • 套接字激活是一種由systemd引入的概念,它允許服務在需要時由系統動態啟動。這避免了在系統啟動時預先啟動所有服務,而是在請求時按需啟動。
    • 例子:一個服務可能在套接字上監聽,只有當有連接請求時才會啟動。
  5. Cgroups(控制組):

    • systemd使用Linux內核的Cgroups功能來對進程進行分組和管理資源。這使得系統管理員可以更精細地控制每個單元(如服務)的資源使用。
    • 例子:通過Cgroups,可以限制一個服務的內存使用量或CPU占用。
  6. Journal日志系統:

    • systemd引入了Journal日志系統,用于更好地管理系統的日志。它可以存儲和檢索豐富的日志信息,并提供了強大的日志查詢功能。
    • 例子:journalctl命令可以用于檢查系統日志。

理解這些核心概念有助于系統管理員更好地配置和管理系統。通過systemd的這些抽象,管理系統的復雜性得到了簡化,同時也提供了更多靈活性和控制權。

第三:服務管理與啟動過程

systemd通過服務單元文件(Unit files)來管理和配置系統服務。下面是深入探討systemd服務管理和啟動過程的一些關鍵方面:

  1. 服務單元文件結構:

    • 服務單元文件是以.service為擴展名的文本文件,通常存儲在/etc/systemd/system//usr/lib/systemd/system/目錄中。用戶自定義的服務單元文件應該存儲在前者,而系統提供的服務單元文件存儲在后者。

    • 一個最基本的服務單元文件包括以下部分:

      [Unit]
      Description=My Service[Service]
      ExecStart=/path/to/executable
      
      • [Unit] 部分包含關于單元的元數據,如描述(Description)。
      • [Service] 部分包含有關服務的配置,如執行服務的命令(ExecStart)。
  2. 服務單元文件配置選項:

    • [Unit] 部分常用的配置選項包括:
      • Description:描述單元的文本。
      • After:指定此單元在哪個單元之后啟動。
      • Requires:指定此單元依賴的其他單元。
    • [Service] 部分的常用配置選項包括:
      • ExecStart:指定服務的啟動命令。
      • Restart:指定服務在失敗時是否重啟。
      • Type:指定服務的類型,如簡單服務(simple)、常駐服務(forking)等。
  3. 服務的啟動過程:

    • 當系統啟動時,systemd首先加載啟動目標(target),目標是一組相關的單元的集合。
    • 啟動目標會觸發相關的服務單元的啟動。這些服務單元可能有依賴關系,systemd會按照依賴關系的順序啟動它們。
    • 服務的啟動過程包括執行ExecStart中指定的命令,如果該命令是一個守護進程,systemd還會監視該進程的狀態。
  4. 系統日志和服務狀態:

    • systemd的服務輸出通常被重定向到系統日志(Journal)。可以使用journalctl命令來檢查和過濾服務的日志信息。
    • 使用systemctl命令可以查看和管理服務的狀態。例如,systemctl status servicename會顯示有關特定服務的詳細信息。
  5. 故障排除和日志檢查:

    • 如果服務出現問題,可以使用systemctljournalctl命令來檢查服務狀態和日志,以便進行故障排除。
    • 例如,journalctl -xe命令可以顯示詳細的系統日志,包括任何服務啟動或運行時的錯誤信息。

通過理解這些概念和步驟,系統管理員可以更好地配置、管理和故障排除系統服務,確保它們按照期望的方式啟動和運行。

第四:定時任務與定時器

在systemd中,定時任務和定時器是通過timer單元文件來實現的。下面是關于定時任務和定時器的介紹以及一個實際案例:

定時任務和定時器的概念:

  1. 定時任務(Timer):

    • 定時任務是一個systemd單元,用于觸發相關聯的服務單元。它定義了何時以及如何啟動關聯的服務。
    • 定時任務的配置文件通常以.timer為擴展名,類似于服務單元文件。
  2. 定時器(Timer):

    • 定時器是一個systemd單元,用于觸發相關聯的操作。它可以與服務單元一起使用,也可以獨立使用。
    • 定時器配置文件的命名通常以.timer為擴展名。

配置實例:

1. 創建一個定時器單元文件:

創建一個名為mytimer.timer的文件,該文件位于/etc/systemd/system/目錄下,內容如下:

[Unit]
Description=My Timer[Timer]
OnCalendar=daily
Persistent=true[Install]
WantedBy=timers.target
  • OnCalendar定義了定時器何時觸發。上述例子中,它被配置為每天觸發一次。
  • Persistent=true表示如果定時器在計劃時間內未能觸發,那么它會在系統下次啟動時盡快觸發。

2. 創建一個關聯的服務單元文件:

創建一個名為myservice.service的文件,該文件位于/etc/systemd/system/目錄下,內容如下:

[Unit]
Description=My Service[Service]
ExecStart=/path/to/executable

3. 啟用和啟動定時器:

使用以下命令啟用和啟動定時器:

sudo systemctl enable mytimer.timer
sudo systemctl start mytimer.timer

這將啟用定時器,并在每天按照指定的時間觸發關聯的服務。

4. 檢查定時器狀態和日志:

使用以下命令檢查定時器狀態和日志:

sudo systemctl status mytimer.timer
journalctl -u mytimer.timer

這將顯示定時器的當前狀態和相關的日志信息。

通過這個實例,你可以看到如何配置和使用systemd的定時任務和定時器來定期執行特定的操作,這對于定期維護任務或周期性執行腳本非常有用。

第五:日志管理與Journal

systemd Journal是systemd引入的高級日志系統,用于管理和記錄系統的日志信息。它有以下作用和功能:

作用和功能:

  1. 中央化的日志存儲:

    • Journal將系統日志信息集中存儲在二進制文件中,替代了傳統的文本日志文件。這種格式更加緊湊且易于管理。
  2. 結構化日志信息:

    • Journal記錄的日志信息是結構化的,包含了更多的元數據,如時間戳、日志來源、優先級等。這使得查詢和分析日志變得更加方便。
  3. 高級過濾和查詢:

    • Journalctl命令提供了強大的過濾和查詢功能,可以按照時間范圍、單元名稱、關鍵字等多個條件進行日志檢索,使得管理員能夠更精準地找到感興趣的信息。
  4. 實時日志:

    • Journal支持實時查看日志,可以通過journalctl命令實時跟蹤系統日志的輸出,方便管理員及時發現問題。

使用journalctl命令演示:

以下是一些常見的journalctl命令用法:

  1. 查看系統日志:

    journalctl
    

    這將顯示系統的所有日志信息,最新的日志在最上面。

  2. 按服務單元過濾:

    journalctl -u servicename
    

    這將顯示與特定服務單元相關的日志信息,用于檢查該服務的狀態和運行情況。

  3. 按時間范圍過濾:

    journalctl --since "2022-01-01 00:00:00" --until "2022-12-31 23:59:59"
    

    這將顯示在指定時間范圍內生成的所有日志信息。

  4. 按關鍵字搜索:

    journalctl | grep "keyword"
    

    這將在所有日志中搜索包含指定關鍵字的記錄。

  5. 實時查看日志:

    journalctl -f
    

    這將以實時模式跟蹤日志輸出,顯示最新的日志記錄。

  6. 按級別過濾:

    journalctl -p err
    

    這將只顯示錯誤級別(err)及以上的日志信息。

通過這些命令,系統管理員可以輕松地查詢和分析系統的日志信息,以便及時發現和解決問題。Journal的結構化和高級功能使得日志管理變得更加靈活和強大。

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

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

相關文章

bootstrap插件的基本使用

1.更新表格數據(根據行索引:僅更新一個單元格) var rows {index : index, //更新列所在行的索引field : "status", //要更新列的fieldvalue : "正常" //要更新列的數據 } $(#table_Id).bootstrapTable("updateCel…

DELPHI開發APP回憶錄二安卓與pc端路徑的選擇

路徑方法WinAndroidGetHomePathC:\Users\ggggcexx\AppData\Roaming/data/user/0/com.stella.scan/files/GetDocumentsPathC:\Users\ggggcexx\Documents/data/user/0/com.embarcadero.FirstAidExpert_FMX_D11/filesGetSharedDocumentsPathC:\Users\Public\Documents/storage/emu…

杰發科技AC7801——EEP內存分布情況

簡介 按照文檔進行配置 核心代碼如下 /*!* file sweeprom_demo.c** brief This file provides sweeprom demo test function.**//* Includes */ #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"/* Define …

導出文件到指定路徑??

需求&#xff1a;點擊導出pdf按鈕&#xff0c;彈出系統文件夾彈框&#xff0c;可以選擇保存文件的位置。 經查詢window.showSaveFilePicker可實現&#xff0c;但這個api處于實驗階段&#xff0c;且用下來確實和瀏覽器類型、瀏覽器版本、以及本身api就不穩定有關系。 代碼見下…

Python,FastAPI,mLB網關,無法訪問/docs

根源就是js和ccs文件訪問路由的問題&#xff0c;首先你要有本地的文件&#xff0c;詳情看https://qq742971636.blog.csdn.net/article/details/134587010。 其次&#xff0c;你需要這么寫&#xff1a; /unicontorlblip就是我配置的mLB網關路由。 app FastAPI(titleoutpaint…

【力扣:421,2935】數組內最大異或對問題

思路&#xff1a;從最高位向低位構造&#xff0c;對每一位利用哈希表尋找是否存在可使此位為1的數 第一輪找1&#xff1a;清空哈希表&#xff0c;1&#xff0c;2存1&#xff0c;到3發現1^01&#xff0c;res|1<<3 第二輪找11&#xff1a;清空哈希表&#xff0c;1存10&…

如何開發洗鞋店用的小程序

隨著人們生活水平的提高&#xff0c;洗護行業是越來越細分化了&#xff0c;從最開始的干洗店包含洗護行業的所有服務到現在有專門為洗鞋開的店&#xff0c;如果開發一款洗鞋店用的小程序&#xff0c;可以實現用戶在家下單直接有人上門取鞋的話&#xff0c;應該如何去開發呢&…

將 Spring 微服務與 BI 工具集成:最佳實踐

軟件開發領域是一個不斷發展的領域&#xff0c;新的范式和技術不斷涌現。其中&#xff0c;微服務架構和商業智能&#xff08;BI&#xff09;工具的采用是兩項關鍵進步。隨著 Spring Boot 和 Spring Cloud 在構建強大的微服務方面的普及&#xff0c;了解這些微服務如何與 BI 工具…

11-@Transaction與AOP沖突解決

如題&#xff0c;最近碰到了一個問題&#xff0c;在public方法上添加Transaction沒有生效&#xff0c;事務沒有回滾。 我自己模擬了一個功能&#xff0c;向數據庫表User里面插入用戶數據。說一下代碼背景&#xff0c; 數據庫MySQL&#xff0c;持久化層Mybatis&#xff0c;項目使…

Vue3(setup)中使用vue-cropper圖片上傳裁剪插件,復制代碼直接使用

最近在項目中用到上傳裁剪&#xff0c;看了一下代碼&#xff0c;覺得這插件可可以。梳理了一下代碼分享給大家 前端UI組件element-plus 如果你也用到了 &#xff0c;快速幫你解決了問題,別忘記點贊收藏 1.首先看效果圖 因為版本vue-cropper 眾多 &#xff0c;雖然網上有各…

阿里云windwos 安裝oracle數據庫,外部用工具連接不上,只能在服務器本機通過127.0.0.1 連接

1. 首先檢查阿里云服務器安全組端口是否開放 oracle 數據庫端口 2. 其次找到oracle 安裝的目錄&#xff0c;打開這倆個文件&#xff0c;將localhost 修改為 服務器本機名稱 3.重啟oracle 監聽服務&#xff0c;就可以連接了

ModuleNotFoundError: No module named ‘Tkinter‘

ModuleNotFoundError: No module named ‘Tkinter’ Windows 不要用 import tkinter 用from tkinter import * from tkinter import * root Tk() w Label(root, text"Hello, world!") w.pack() root.mainloop()mac python 3.10版本 brew install python-tk3.1…

技術部工作職能規劃分析

前言 技術部的職能。以下是一個基本的框架,其中涵蓋了技術部在公司中的關鍵職能和子職能。 主要職能 技術部門的主要職能分為以下幾個板塊: - 技術規劃與戰略: 制定技術規劃和戰略,與業務團隊合作確定技術需求。 研究和預測技術趨勢,引領公司在技術創新和數字化轉型方…

基于springboot實現智慧黨建系統項目【項目源碼】計算機畢業設計

基于springboot實現智慧黨建系統演示 Java技術 Java是由Sun公司推出的一門跨平臺的面向對象的程序設計語言。因為Java 技術具有卓越的通用性、高效性、健壯的安全性和平臺移植性的特點&#xff0c;而且Java是開源的&#xff0c;擁有全世界最大的開發者專業社群&#xff0c;所以…

【Unity細節】Unity中為什么用字符串加載對象,檢查多便都加載不出來—(命名細節)

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! 本文由 秩沅 原創 &#x1f636;?&#x1f32b;?收錄于專欄&#xff1a;unity細節和bug &#x1f636;?&#x1f32b;?優質專欄 ?【…

【Python】itertools模塊,補充:可迭代對象、迭代器

Python中 itertools模塊創建高效迭代器、處理序列數據集。 此模塊所有函數返回迭代器&#xff0c;可用for循環獲取迭代器中的內容&#xff0c;也可用list(...)用列表形式顯示內容。 import itertools[ x for x in dir(itertools) if not x.startswith(_)] # 結果&#xff1a;…

什么是網絡爬蟲技術?它的重要用途有哪些?

網絡爬蟲&#xff08;Web Crawler&#xff09;是一種自動化的網頁瀏覽程序&#xff0c;能夠根據一定的規則和算法&#xff0c;從互聯網上抓取和收集數據。網絡爬蟲技術是隨著互聯網的發展而逐漸成熟的一種技術&#xff0c;它在搜索引擎、數據挖掘、信息處理等領域發揮著越來越重…

Centos/Linux安裝Apahce出現bug匯總

源碼安裝Apache軟件 使用軟件&#xff1a;Apahce2.4.58&#xff0c;apr1.5.2&#xff0c; apr-util1.5.4 1.下載apr、apr-util和Apache軟件&#xff1b; 2.安裝apr壓縮包&#xff0c;步驟如下&#xff1a; 第一、解壓縮 tar zxvf apr-1.5.2.tar.gz第二、安裝 cd /usr/local/sr…

RAID的應用場景以及優缺點

RAID 0(條帶化)&#xff1a; 工作原理&#xff1a; 數據被分成塊&#xff0c;每個塊寫入不同的驅動器&#xff0c;以并行方式提高讀寫性能。 優勢&#xff1a; 卓越的性能提升&#xff0c;特別是對于大型文件的讀寫操作。 劣勢&#xff1a; 完全沒有冗余&#xff0c;一個驅動器…

MFC 中創建并顯示二維碼

1.創建并顯示 QRcode* pQR_Encode; pQR_Encode QRcode_encodeString("12345678901234567890", 0, QR_ECLEVEL_H, QR_MODE_8, 1); if (pQR_Encode) { int nBmpWidth pQR_Encode->width; //獲取控件的邊界大小 CRect rect; Ge…