linux---systemd進程


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/,真正的配置文件存放在那個目錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM