systemd 概述
100%

初始化 · 第 5 课

systemd 概述

学习 systemd 如何加载单元、解析依赖关系、激活目标,以及管理系统和用户资源。

systemd 是许多现代 Linux 发行版采用的 PID 1 初始化与服务管理器。systemd 项目还提供日志、设备、登录、网络、时间等组件,但发行版可以自行选择部署哪些部分。

确认正在运行的管理器

应检查实时状态,而不是只看已安装的目录是否存在:

$ ps -p 1 -o pid,comm,args=
$ systemctl is-system-running

即使某个系统的 PID 1 是其他程序,/usr/lib/systemd/ 目录也可能存在;容器也可能提供自己的 PID 命名空间。systemctl 还支持用户管理器、远程管理器和容器管理器模式,因此要先确定操作所针对的管理器。

哪项信息最能直接确认 systemd 是系统初始化管理器?

作为受管对象的单元

单元是 systemd 对资源或活动建立的具名模型。常见单元类型包括:

  • .service:进程和守护进程
  • .socket:套接字激活
  • .mount.automount:文件系统
  • .timer.path:事件驱动的激活
  • .target:分组与同步
  • .device.swap.slice.scope:其他受管资源

单元的状态并不总是“正在运行”。挂载单元可以处于已挂载状态,定时器可以处于等待状态,设备可以处于已出现状态,而目标在其依赖关系满足后可以处于活动状态。

哪种单元通常用于将其他单元分组,并提供同步点?

单元加载路径与覆盖配置

系统单元可以从发行版和管理员配置路径加载,例如:

  • /usr/lib/systemd/system/:许多发行版用于存放软件包提供的单元
  • /run/systemd/system/:运行时生成的配置或临时配置
  • /etc/systemd/system/:持久的本地管理员配置与覆盖配置

具体的厂商路径可能不同。具有更高优先级的本地配置会覆盖同名单元的低优先级文件。与其复制并修改完整的厂商文件,不如使用 systemctl edit UNIT 创建插入式覆盖配置,这样软件包更新带来的改动仍然可见。

持久的本地系统单元覆盖配置通常应放在哪里?

依赖关系与顺序

systemd 根据依赖关系构建事务。Wants=Requires= 会以不同强度将其他单元纳入事务。Before=After= 规定两个单元都被调度时的执行顺序;它们本身不会促使另一个单元启动。

After=network.target 并不能证明网络连接、DNS 或某个远程端点已经可用。服务必须采用适当的 network-online 集成机制,或自行实现重试和就绪检测。

After=other.service 本身规定了什么?

目标与默认启动事务

default.target 通常是指向 multi-user.targetgraphical.target 等目标的别名。systemd 会为该目标及其依赖项启动一个事务,在强制执行明确顺序的同时,允许互不相关的工作并发进行。

目标只是在粗略的兼容层面上类似运行级别。多个目标可以同时处于活动状态,也可以创建自定义目标;某个目标处于活动状态,并不表示计算机上的每项服务都健康。

default.target 通常选择什么?

课程已完成

你已完成 systemd 概述

现在,你可以从实时管理器、单元和事务的角度描述 systemd。

  • 通过相关命名空间中的 PID 1 和管理器连接来确认 systemd。

  • 将资源类型与对应的单元后缀相匹配。

  • 将本地覆盖配置置于厂商配置之上。

  • 区分依赖强度、执行顺序和应用程序就绪状态。

  • 将目标视为分组和里程碑,而不是互斥状态。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 初始化