systemd 简介
systemd是linux系統第一個運行的進程,用來創建系統的守護進程來管理整個linux系統。systemd取代init的一個優勢就是他集合了豐富的功能,同時支持并行啟動守護進程,使用起來方便。可以理解為systemd初始化整個系統所需的資源。
文章目錄
- 一、systemd 基本命令
- 1、systemctl
- 2、systemd-analyze
- 二、Unit
- 1、分類
- 2、unit管理
- 3、依賴、順序
- 三、Unit配置文件
- 【Uint】區塊
- 【Install】區塊
- 【Service】區塊
- 四、Target
一、systemd 基本命令
通過命令控制systemd來管理系統的服務。
1、systemctl
systemctl是最基本的一個命令,可用于管理系統:
# 重啟系統 $ sudo systemctl reboot # 關閉系統,切斷電源 $ sudo systemctl poweroff # CPU停止工作 $ sudo systemctl halt # 暫停系統 $ sudo systemctl suspend # 讓系統進入冬眠狀態 $ sudo systemctl hibernate # 讓系統進入交互式休眠狀態 $ sudo systemctl hybrid-sleep # 啟動進入救援狀態(單用戶狀態) $ sudo systemctl rescue2、systemd-analyze
systemd-analyze用于分析系統啟動守護進程所耗費的時間。
# 查看啟動耗時 $ systemd-analyze # 查看每個服務的啟動耗時 $ systemd-analyze blame # 顯示瀑布狀的啟動過程流 $ systemd-analyze critical-chain # 顯示指定服務的啟動流 $ systemd-analyze critical-chain atd.service二、Unit
Systemd 可以管理的系統資源。不同的資源統稱為 Unit(單位)。
1、分類
Unit有12種:
- service:系統服務
- target:多個unit構成的一個組
- mount:文件系統掛載點
- automount:自動掛載點
- path:文件或路徑
- scope:不是由systemd啟動的外部進程
- slice:進程組
- socket:進程間通信的socket
- swap:swap文件
- timer:定時器
- device:硬件設備
2、unit管理
最常用的unit管理命令:
- systemctl start unit
- systemctl stop unit
- systemctl restart unit
- systemctl reload unit(重新加載unit的配置文件)
- systemctl kill unit(殺死unit的所有進程)
- systemctl daemon-reload(重新加載所有修改過的配置文件)
3、依賴、順序
Unit 之間存在依賴關系:若A 依賴于 B,就意味著 Systemd 在啟動 A 的時候,同時會去啟動 B。
systemctl list-dependencies命令列出一個 Unit 的所有依賴。
- want:表示弱依賴,若一個弱依賴的服務異常關閉,本服務不受影響
- require:表示強依賴,若一個強依賴的服務異常關閉,本服務也要關閉
- after:本服務要在之后執行
- before:本服務要在之前執行
注意,Wants字段與Requires字段只涉及依賴關系,與啟動順序無關,默認情況下是同時啟動的。
三、Unit配置文件
每一個 Unit 都有一個配置文件,告訴 Systemd 怎么啟動這個 Unit 。
Systemd 默認從目錄/etc/systemd/system/讀取配置文件。但是,里面存放的大部分文件都是符號鏈接,真正的配置文件存放在/lib/systemd/system/目錄下
【Uint】區塊
[Unit]區塊用來定義 Unit 的內容,配置與其他 Unit 的依賴、啟動順序關系。它的主要字段如下。
Description:簡短描述 Documentation:文檔地址 Requires:當前 Unit 依賴的其他 Unit,如果它們沒有運行,當前 Unit 會啟動失敗 Wants:與當前 Unit 配合的其他 Unit,如果它們沒有運行,當前 Unit 不會啟動失敗 BindsTo:與Requires類似,它指定的 Unit 如果退出,會導致當前 Unit 停止運行 Before:如果該字段指定的 Unit 也要啟動,那么必須在當前 Unit 之后啟動 After:如果該字段指定的 Unit 也要啟動,那么必須在當前 Unit 之前啟動【Install】區塊
定義如何啟動,以及是否開機啟動。它的主要字段如下。
WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants后綴構成的子目錄中 RequiredBy:它的值是一個或多個 Target,當前 Unit 激活時,符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .required后綴構成的子目錄中 Alias:當前 Unit 可用于啟動的別名 Also:當前 Unit 激活(enable)時,會被同時激活的其他 Unit【Service】區塊
Service 類型的 Unit 才有這個區塊。它的主要字段如下。
Type:定義啟動時的進程行為。它有以下幾種值。 Type=simple:默認值,執行ExecStart指定的命令,啟動主進程 Type=forking:以 fork 方式從父進程創建子進程,創建后父進程會立即退出 Type=oneshot:一次性進程,Systemd 會等當前服務退出,再繼續往下執行 Type=dbus:當前服務通過D-Bus啟動 Type=notify:當前服務啟動完畢,會通知Systemd,再繼續往下執行 Type=idle:若有其他任務執行完畢,當前服務才會運行 ExecStart:啟動當前服務的命令 ExecStartPre:啟動當前服務之前執行的命令 ExecStartPost:啟動當前服務之后執行的命令 ExecReload:重啟當前服務時執行的命令 ExecStop:停止當前服務時執行的命令 ExecStopPost:停止當其服務之后執行的命令 RestartSec:自動重啟當前服務間隔的秒數 Restart:定義何種情況 Systemd 會自動重啟當前服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數 Environment:指定環境變量 RemainAfterExit:unit的進程退出后,unit資源保留下來四、Target
systemd管理的Unit很多,一個個啟動很麻煩,用target來幫助系統大量啟動Unit。Target 就是一個 Unit 組,包含許多 Unit。啟動某個 Target 的時候,Systemd 就會啟動里面所有的 Unit。
systemd啟動的第一個target為default.target,他是一個軟鏈接,能指向multi-user.target或graphical.target.(用戶控制)
graphical.target啟動了圖形界面所需的服務,包括了multi-user.target.
systemd啟動的服務流程可從官網提供的流程圖了解:
https://www.freedesktop.org/software/systemd/man/bootup.html#System%20Manager%20Bootup
總結
以上是生活随笔為你收集整理的systemd 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件夹别名路径 请求图片时报错
- 下一篇: systemd服务分析