一、Systemd初始化
Debian系統(tǒng)啟動時(shí),/usr/sbin/init符號鏈接到/usr/lib/systemd,并作為init系統(tǒng)進(jìn)程(PID=1)由root(UID=0)啟動。systemd初始化進(jìn)程使用單元配置文件來并行派生進(jìn)程。這些單元配置文件使用聲明式樣式編寫,并代替了以前的類SysV的過程樣式。
例如,管理員可以使用systemctl命令啟動和停止服務(wù),并且可以使用systemctl status命令來查看服務(wù)的狀態(tài)。此外,管理員可以使用systemctl enable命令在系統(tǒng)啟動時(shí)自動啟動服務(wù)。
這些單元配置文件從下面的一系列路徑來加載:
派生的進(jìn)程被放在一個單獨(dú)的 Linux control groups,在單元后命名,它們屬于一個私有的 systemd 層級結(jié)構(gòu)。
系統(tǒng)模式的單元中描述的 “系統(tǒng)單元搜索路徑 “加載。主要單元按優(yōu)先級順序排列如下:
- “/etc/systemd/system/*”: 由管理員創(chuàng)建的系統(tǒng)單元
- “/run/systemd/system/*”: 運(yùn)行時(shí)單元
- “/lib/systemd/system/*”: 由發(fā)行版軟件包管理器安裝的系統(tǒng)單元
他們的相互依賴關(guān)系通過”Wants=”, “Requires=”, “Before=”, “After=”, … 等指示來配置。 資源控制也是被定義。
根據(jù)單元配置文件的后綴來區(qū)分它們的類型:
- *.service 描述由 systemd 控制和監(jiān)管的進(jìn)程。
- *.device 描述在 sysfs(5) 里面作為 udev(7) 設(shè)備樹展示的設(shè)備。
- *.mount 描述由 systemd 控制和監(jiān)管的文件系統(tǒng)掛載點(diǎn)。
- *.automount 描述由 systemd 控制和監(jiān)管的文件系統(tǒng)自動掛載點(diǎn)
- *.swap 描述由 systemd 控制和監(jiān)管的 swap 文件或設(shè)備。
- *.path 描述被 systemd 監(jiān)控的路徑,用于基于路徑的活動。
- *.socket 描述被 systemd 控制和監(jiān)管的套接字,用于基于套接字的活動。
- *.timer 描述被 systemd 控制和監(jiān)管的計(jì)時(shí)器,用于基于時(shí)間的活動。
- *.slice 管理 cgroups(7) 的資源。
- *.scope 使用 systemd 的總線接口來程序化的創(chuàng)建,用以管理一系列系統(tǒng)進(jìn)程。
- *.target 把其它單元配置文件分組,在啟動的時(shí)候,來創(chuàng)建同步點(diǎn)。
系統(tǒng)啟動時(shí)(即,init),systemd 進(jìn)程會嘗試啟動”/lib/systemd/system/default.target(通常是到”graphical.target”的符號鏈接)。首先,一些特殊的 target 單元,比如 “local-fs.target”、”swap.target”和”cryptsetup.target”會被引入以掛載文件系統(tǒng)。之后,其它 target 單元也會根據(jù)單元依賴關(guān)系而被引入。systemd 提供向后兼容的功能。在 “/etc/init.d/rc[0123456S].d/[KS]name” 里面的 SysV 風(fēng)格的啟動腳本仍然會被分析;telinit(8) 會被轉(zhuǎn)換為 systemd 的單元活動請求。
注意:模擬的運(yùn)行級別 2 到 4 全部被符號鏈接到了相同的“multi-user.target”。
二、Syatemd登錄
當(dāng)用戶通過 gdm3(8)、sshd(8) 等登錄 Debian 系統(tǒng)時(shí),/lib/systemd/system –user 將作為相應(yīng)用戶擁有的用戶服務(wù)管理進(jìn)程啟動。systemd 用戶服務(wù)管理進(jìn)程會根據(jù)聲明式單元配置文件并行生成進(jìn)程。
用戶模式的單元從 systemd.unit(5) 中描述的 “用戶單元搜索路徑 “加載。主要單元按優(yōu)先級順序排列如下:
- “~/.config/systemd/user/*”: 用戶配置單元
- “/etc/systemd/user/*”:用戶配置單元: 由管理員創(chuàng)建的用戶單元
- “/run/systemd/user/*”:運(yùn)行時(shí)單元: 運(yùn)行時(shí)單元
- “/lib/systemd/user/*”: 由發(fā)行版軟件包管理器安裝的用戶單元