核心概念service-management
systemd 单元与服务状态
理解 systemd Unit、单元文件、依赖关系、运行状态和开机启用状态之间的区别。
**systemd Unit(单元)**是 systemd 管理的资源或任务对象。单元名称由名称和类型后缀组成,例如 ssh.service。常见类型包括服务(.service)、套接字(.socket)、定时器(.timer)、挂载点(.mount)和目标(.target)。
**Unit file(单元文件)**声明单元的配置、依赖和安装关系;systemd 把文件加载为运行时单元对象。
三组容易混淆的状态
Section titled “三组容易混淆的状态”| 状态 | 示例 | 回答的问题 |
|---|---|---|
| 加载状态 | loaded、not-found、masked |
systemd 是否找到并接受定义? |
| 运行状态 | active、inactive、failed |
单元现在处于什么状态? |
| 启用状态 | enabled、disabled、static |
启动依赖关系是否配置好? |
因此,enabled 不保证当前正在运行,active 也不保证下次开机会自动拉起。
依赖关系和启动顺序是不同维度。例如 Requires= 表达强依赖,After= 只表达排序;只写其中一个不能自动获得另一个的语义。.target 通常用于聚合一组单元,而不是传统意义上的后台进程。
管理员覆盖通常放在 /etc/systemd/system/,软件包提供的文件通常位于 /usr/lib/systemd/system/ 或发行版兼容路径。应使用 drop-in 覆盖局部设置,避免直接修改会被软件包升级替换的文件。
unit=ssh.servicesystemctl show --property=LoadState,ActiveState,SubState,UnitFileState "$unit"systemctl cat "$unit"systemctl cat 只显示 systemd 实际组合的主文件和 drop-in,不修改配置。
daemon-reload重新读取定义,但不会自动重启服务。reload请求服务重载自身配置;并非每个服务都实现它。mask比disable更强,会阻止单元被手动或依赖启动。- 服务失败可能来自前置条件、依赖、权限、路径或配置,不应只靠反复重启处理。