当前位置:首页 > 站长知识 > 正文内容

Debian Systemd初始化详解

2024-08-27站长知识14

一、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/*”: 由发行版软件包管理器安装的用户单元