一、Systemd初始化
Debian系统启动时,/usr/sbin/init符号链接到/usr/lib/systemd,并作为init系统进程(PID=1)由root(UID=0)启动。systemd初始化进程使用单元配置文件来并行派生进程。这些单元配置文件使用声明式样式编写,并代替了以前的类SysV的过程样式。
例如,管理员可以使用systemctl命令启动和停止服务,并且可以使用systemctl status命令来查看服务的状态。此外,管理员可以使用systemctl enable命令在系统启动时自动启动服务。
这些单元配置文件从下面的一系列路径来加载:
派生的进程被放在一个单独的 Linux control groups,在单元后命名,它们属于一个私有的 systemd 层级结构。
系统模式的单元中描述的 “系统单元搜索路径 “加载。主要单元按优先级顺序排列如下:
- “/etc/systemd/system/*”: 由管理员创建的系统单元
- “/run/systemd/system/*”: 运行时单元
- “/lib/systemd/system/*”: 由发行版软件包管理器安装的系统单元
他们的相互依赖关系通过”Wants=”, “Requires=”, “Before=”, “After=”, … 等指示来配置。 资源控制也是被定义。
根据单元配置文件的后缀来区分它们的类型:
- *.service 描述由 systemd 控制和监管的进程。
- *.device 描述在 sysfs(5) 里面作为 udev(7) 设备树展示的设备。
- *.mount 描述由 systemd 控制和监管的文件系统挂载点。
- *.automount 描述由 systemd 控制和监管的文件系统自动挂载点
- *.swap 描述由 systemd 控制和监管的 swap 文件或设备。
- *.path 描述被 systemd 监控的路径,用于基于路径的活动。
- *.socket 描述被 systemd 控制和监管的套接字,用于基于套接字的活动。
- *.timer 描述被 systemd 控制和监管的计时器,用于基于时间的活动。
- *.slice 管理 cgroups(7) 的资源。
- *.scope 使用 systemd 的总线接口来程序化的创建,用以管理一系列系统进程。
- *.target 把其它单元配置文件分组,在启动的时候,来创建同步点。
系统启动时(即,init),systemd 进程会尝试启动”/lib/systemd/system/default.target(通常是到”graphical.target”的符号链接)。首先,一些特殊的 target 单元,比如 “local-fs.target”、”swap.target”和”cryptsetup.target”会被引入以挂载文件系统。之后,其它 target 单元也会根据单元依赖关系而被引入。systemd 提供向后兼容的功能。在 “/etc/init.d/rc[0123456S].d/[KS]name” 里面的 SysV 风格的启动脚本仍然会被分析;telinit(8) 会被转换为 systemd 的单元活动请求。
注意:模拟的运行级别 2 到 4 全部被符号链接到了相同的“multi-user.target”。
二、Syatemd登录
当用户通过 gdm3(8)、sshd(8) 等登录 Debian 系统时,/lib/systemd/system –user 将作为相应用户拥有的用户服务管理进程启动。systemd 用户服务管理进程会根据声明式单元配置文件并行生成进程。
用户模式的单元从 systemd.unit(5) 中描述的 “用户单元搜索路径 “加载。主要单元按优先级顺序排列如下:
- “~/.config/systemd/user/*”: 用户配置单元
- “/etc/systemd/user/*”:用户配置单元: 由管理员创建的用户单元
- “/run/systemd/user/*”:运行时单元: 运行时单元
- “/lib/systemd/user/*”: 由发行版软件包管理器安装的用户单元