跳转到内容
核心概念service-management

systemd 单元与服务状态

理解 systemd Unit、单元文件、依赖关系、运行状态和开机启用状态之间的区别。

状态
已审阅
难度
入门
平台
linux · debian · ubuntu

**systemd Unit(单元)**是 systemd 管理的资源或任务对象。单元名称由名称和类型后缀组成,例如 ssh.service。常见类型包括服务(.service)、套接字(.socket)、定时器(.timer)、挂载点(.mount)和目标(.target)。

**Unit file(单元文件)**声明单元的配置、依赖和安装关系;systemd 把文件加载为运行时单元对象。

状态 示例 回答的问题
加载状态 loadednot-foundmasked systemd 是否找到并接受定义?
运行状态 activeinactivefailed 单元现在处于什么状态?
启用状态 enableddisabledstatic 启动依赖关系是否配置好?

因此,enabled 不保证当前正在运行,active 也不保证下次开机会自动拉起。

依赖关系和启动顺序是不同维度。例如 Requires= 表达强依赖,After= 只表达排序;只写其中一个不能自动获得另一个的语义。.target 通常用于聚合一组单元,而不是传统意义上的后台进程。

管理员覆盖通常放在 /etc/systemd/system/,软件包提供的文件通常位于 /usr/lib/systemd/system/ 或发行版兼容路径。应使用 drop-in 覆盖局部设置,避免直接修改会被软件包升级替换的文件。

Terminal window
unit=ssh.service
systemctl show --property=LoadState,ActiveState,SubState,UnitFileState "$unit"
systemctl cat "$unit"

systemctl cat 只显示 systemd 实际组合的主文件和 drop-in,不修改配置。

  • daemon-reload 重新读取定义,但不会自动重启服务。
  • reload 请求服务重载自身配置;并非每个服务都实现它。
  • maskdisable 更强,会阻止单元被手动或依赖启动。
  • 服务失败可能来自前置条件、依赖、权限、路径或配置,不应只靠反复重启处理。