mask 是什么
屏蔽把单元名链接到空设备,让 systemd 在任何启动路径上都拒绝它,包括被依赖关系拉起,这一点比禁用更彻底。它用于强禁服务或隔离故障单元,代价是可能打断依赖链,让上层服务启动失败。
基本信息
| 用途 | 禁止单元被启动,含被依赖拉起 |
|---|---|
| 语法 | systemctl mask 单元名,解除用 unmask |
| 与禁用对照 | 禁用只取消开机自启,不阻止手动或依赖启动 |
| 状态查询 | is-enabled 显示为 masked |
典型使用场景
- 强禁服务:某服务在本机明确不该运行,连被依赖拉起都要拦住
- 隔离故障单元:排障期临时屏蔽有问题的单元,避免被反复拉起
- 替代方案接管:屏蔽自带服务,由自研组件承担同一职责
- 维护窗口保护:变更期间阻止被依赖关系意外启动
- 梳理依赖:屏蔽后观察哪些上层单元报错,反推耦合关系
常用示例
常用示例
systemctl mask firewalld # 屏蔽
systemctl is-enabled firewalld # 输出 masked
systemctl unmask firewalld # 解除屏蔽
systemctl list-unit-files --state=masked | head # 列出所有被屏蔽的单元操作效果对照
| 操作 | 效果 | 注意 |
|---|---|---|
| 停止 | 停止当前运行 | 不阻止后续被启动 |
| 禁用 | 取消开机自启 | 手动与依赖启动仍然可行 |
| 屏蔽 | 彻底禁止启动 | 被依赖拉起也会失败 |
| 解除屏蔽 | 恢复可启动 | 单元文件必须仍然存在 |
| 列出被屏蔽单元 | 审计用途 | 确认没有遗留的临时屏蔽 |
屏蔽会拦截所有启动路径,临时屏蔽故障单元后要记录并尽快解除,否则运维容易遗忘。
屏蔽与停止是两件事:屏蔽不会停止正在运行的服务,需要时两个操作一起做。
单元文件已被软件包移除时解除屏蔽会报错,先确认文件是否还在。
屏蔽状态会覆盖启用状态:屏蔽期间执行启用命令不会恢复开机自启,必须先解除屏蔽再启用。
排障结束后用列表命令复核被屏蔽单元清单,避免遗留状态影响后续运维。