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