enable 与开机自启
在 systemd 里,服务「当前是否运行」和「开机是否自动启动」是两件独立的事:start 只管这一次,enable 才决定下次开机拉不拉起来。enable 的本质是在对应启动目标目录下建立软链,把单元挂进开机流程;disable 则删除这条软链,但不会动正在运行的进程。交付与巡检时最常做的就是批量为服务做自启取舍,把不需要的服务关掉,既减少资源占用也收敛暴露面。
基本信息
| 启用自启 | systemctl enable 单元名 |
|---|---|
| 禁用自启 | systemctl disable 单元名 |
| 启用并立即启动 | systemctl enable --now 单元名 |
| 停止并禁用 | systemctl disable --now 单元名 |
| 状态查询 | systemctl is-enabled 单元名 |
| 常见取值 | enabled、disabled、static、masked、indirect |
典型使用场景
- 交付初检:列出自启服务清单逐项核对,关掉不需要的默认服务
- 上线新服务:装完立即设自启并启动,避免重启后业务中断
- 故障后恢复:确认关键服务已设自启,防止下次重启漏启
- 临时停用:只在当前窗口停掉服务但保留自启配置
- 安全收敛:把用不到的服务禁用并屏蔽,减少可被利用的入口
- 核对差异:两台机器对比自启清单,快速找出配置漂移
示例
示例
systemctl enable --now nginx # 设自启并立即启动
systemctl disable --now telnet.socket # 停止并取消自启
systemctl is-enabled chronyd # 查单个服务的自启状态
systemctl list-unit-files --state=enabled | head -40 # 列出所有已设自启的单元
systemctl list-unit-files --state=disabled | head -20 # 看看还有哪些是默认关闭的is-enabled 取值读法
| 取值 | 含义 | 说明 |
|---|---|---|
| enabled | 已设开机自启 | 符合预期,按需保留 |
| disabled | 未设自启 | 关键服务处在此状态需确认 |
| static | 没有安装段,无法直接 enable | 由其它单元或目标拉起 |
| masked | 已被屏蔽 | 比禁用更强制,改回需先解除屏蔽 |
| indirect | 间接启用 | 由别的单元引用而生效 |
static 表示单元文件里没有安装段,它不是错误状态,也不能直接 enable,通常由目标或其它单元拉起。看到 static 时不要盲目改成 enabled,应先弄清它究竟由谁负责启动。
disable 只取消开机自启,不会停止正在运行的服务。想「立刻停掉且以后不再启动」,要写 disable --now。反过来,停用安全组件(防火墙、审计服务)前应先确认合规要求与替代控制措施。