systemd進程的由來
在CentOS7之前,linux啟動一直采用init進程,例:
$ sudo /etc/init.d/apache2 start 或者
$ service apache2 start
這種啟動方式有兩個缺點:
1.啟動時間長。init進程是串行啟動,即前一個進程啟動完才會啟動下一個進程。
2.啟動腳本復雜。init只負責腳本的啟動,腳本需要自己處理各種情況。
systemd就是為了解決這些問題而誕生的。它的設計目標是,為系統的啟動和管理提供一套完整的解決方案。
盡可能啟動較少的進程,盡可能更多進程並發啟動。
根據 Linux 慣例,字母d
是守護進程(daemon)的縮寫。 Systemd 這個名字的含義,就是它要守護整個系統。
使用了 Systemd,就不需要再用init
了。Systemd 取代了initd
,成為系統的第一個進程(PID 等於 1),其他進程都是它的子進程。
查看systemd版本:
systemd功能強大,使用方便,但是體系龐大,非常復雜。
所以有部分人反對使用systemd,原因就是它過於復雜,與操作系統部分強耦合,違反“keep simple,keep stupid”的Unix哲學。
systemd架構圖
systemd包含一組命令
①systemctl是Systemd 的主命令,用於管理系統。
重啟系統 systemctl reboot 關閉系統 systemctl poweroff 或 systemctl halt
系統掛起 systemctl suspend 系統休眠 systemctl hibernate 休眠並掛起 systemctl hybrid-sleep
掛起:把信息到存到內存中,但不能斷電,斷電后數據丟失,恢復最快。也稱睡眠模式。
休眠:把信息寫入到硬盤中,不會有斷電丟失數據的問題,但恢復時最慢,和重新開機一樣。
混合模式:以上兩種模式同時進行。
進入救援狀態(單用戶狀態) systemctl rescue
②systemd-analyze用於查看啟動耗時
systemd-analyze 查看啟動耗時
查看每個服務的啟動耗時 systemd-analyze blame
顯示瀑布狀的啟動過程流 systemd-analyze critical-chain
顯示指定服務的啟動流 systemd-analyze critical-chain 服務名
③hostnamectl 查看當前主機信息
設置主機名 hostnamectl set-hostname 主機名
④localectl 查看本地化設置
設置語言 localectl set-locale LANG=zh_CN.UTF-8 設置鍵盤布局 localectl set-keymap en_GB
⑤timedatectl 設置時區
顯示所有可用的時區 timedatectl list-timezones
⑥loginctl 查看當前登錄的用戶
顯示指定登錄用戶的詳細信息 loginctl show-user 用戶名
Unit簡介
systemd可以管理所有系統資源,不同的資源統稱為Unit(單位)。分為12種:
service 系統服務 target 多個unit構成的組 device 硬件設備 mount 文件系統的掛載點
automount 自動掛載點 path 文件或路徑 scope 非systemd啟動的外部進程 slice 進程組
snapshot systemd快照 socket 進程間通信的socket swap swap文件 timer 定時器
①列出正在運行的unit systemctl list-units
列出所有的unit(包括沒找到配置文件或啟動失敗的) systemctl list-units --all
列出沒有運行的unit systemctl list-units --all --state=inactive
列出加載失敗的unit systemctl list-units --failed
列出正在運行、類型為指定一種的unit systemctl list-units --type=上面12種的1種
②顯示系統狀態 systemctl status
顯示某個服務的狀態,如 systemctl status sshd.service
還可以通過以下幾種方式查看狀態:
unit管理常用命令
以A代表服務名:
開啟服務 systemctl start A 停止服務 systemctl stop A 重啟服務 systemctl restart A
殺死服務所有子進程 systemctl kill A
重新加載服務配置文件 systemctl reload A (平滑重啟,當沒有用戶使用該服務時再重新加載)
重新加載所有更改過的配置文件 systemctl daemon-reload
顯示服務所有底層參數 systemctl show A
顯示服務指定屬性的參數 systemctl show -p 屬性名 A
設置服務指定屬性的值 systemctl set-property A 屬性名=值
顯示Unit的依賴關系
systemctl list-dependencies 資源名
Unit配置文件
每個Unit都有一個配置文件,告訴systemd怎么啟動這個Unit。
Systemd 默認從目錄/etc/systemd/system/
讀取配置文件。但是,里面存放的大部分文件都是符號鏈接,指向目錄/usr/lib/systemd/system/
,真正的配置文件存放在那個目錄。