当前位置:首页>Linux>Linux 运维必学(十五)| 系统服务精讲:从System V到systemd

Linux 运维必学(十五)| 系统服务精讲:从System V到systemd

  • 2026-10-11 06:28:55
Linux 运维必学(十五)| 系统服务精讲:从System V到systemd
玩Linux运维,服务进程管理(daemon)是绝对的核心基础。
开机速度、服务自启、进程启停、环境切换、定时任务,全都依赖一套服务管理机制。
Linux服务管理分为两代:老式 System V init、新式 systemd。
很多人学不懂、记不住,是因为只背命令,没搞懂:systemd 就是为了解决 System V 的所有缺陷而生的。
今天这篇文章,用极简干货的方式,帮你彻底打通两代机制,适配实操+面试。

一、初代机制:System V init(CentOS6 经典版)

System V 是传统的脚本式服务管理,结构简单,但缺点非常致命,也是后来被 systemd 替代的核心原因。

1. 服务脚本存放位置

所有服务脚本统一路径:/etc/init.d/
全部是 bash 脚本,支持自定义修改逻辑,灵活性极高。

2. 基础操作命令(固定格式)

格式:/etc/init.d/服务名 操作
✅ 启动:/etc/init.d/daemon start
✅ 关闭:/etc/init.d/daemon stop
✅ 重启:/etc/init.d/daemon restart
✅ 查状态:/etc/init.d/daemon status

3. 两种服务运行模式

① 独立启动 stand alone

开机常驻内存,实时响应请求,速度快。
适用:高频核心服务,如 sshd、nginx、httpd。

② 总管托管 super daemon(xinetd/inetd)

平时不启动、不占资源,有端口请求才临时唤醒,请求结束立即销毁。
优点:可管控连接、权限、黑白名单;缺点:唤醒有延迟。

4. 最大痛点:无自动服务依赖

这是面试高频考点:
System V 手动启停服务时,不会自动拉起依赖服务。
比如:B服务依赖A服务,只启动B,系统不会自动启A,直接报错失败。
(仅开机靠优先级链接规避,手动操作无效)

5. 七大运行等级 runlevel

Linux 预设 7 个开机级别,对应不同系统环境:
0 → 关机
1 → 单用户救援模式(无网络)
2 → 无网络多用户文本模式
3 → 带网络纯文本模式(生产常用)
4 → 系统保留未使用
5 → 图形桌面模式
6 → 重启

6. 开机自启原理 & 命令

系统不直接读 init.d 脚本,而是读取软链接目录:/etc/rc.d/rc[0-6].d/
SXX服务名:开机启动(数字越小,启动越早)
KXX服务名:开机关闭
自启管理命令
开机自启:chkconfig 服务名 on
关闭自启:chkconfig 服务名 off
查看状态:chkconfig --list 服务名

7. 运行等级切换

init 3 → 切换纯文本模式
init 5 → 切换图形界面模式

二、现代主流:systemd(CentOS7+ / Ubuntu16+)

systemd 是新一代系统服务总管,全盘解决 System V 的所有短板,也是目前生产环境、面试的核心重点。

1. 核心优势(对标旧机制缺陷)

✅并行启动:服务同时启动,大幅提速开机(旧版串行逐个启动)
✅自动依赖处理:启动子服务,自动前置拉起所有依赖服务
✅按需响应:常驻内存,即时唤醒服务,无延迟
✅精细化分类:多类型 unit 单元管理,不再只有两种模式
✅群组管理:target 群组一键切换系统运行环境
✅兼容旧脚本:完美兼容 /etc/init.d/ 老式服务

2. 运维避坑:systemd 局限性

❌ 仅兼容 runlevel 1/3/5,其余等级无对应 target
❌ systemctl 语法固定,无法像脚本一样自定义参数
❌ 手动直接运行进程启动的服务,systemd 无法识别管控
❌ 不支持启动交互,自定义服务必须关闭标准输入交互

3. 配置文件目录(优先级从低到高)

1️⃣ /usr/lib/systemd/system/:系统默认配置(禁止修改,升级会覆盖)
2️⃣ /run/systemd/system/:运行临时配置,优先级更高
3️⃣ /etc/systemd/system/:管理员自定义配置(最高优先级)

4. 六大核心 Unit 单元

systemd 把所有系统功能抽象为「单元」,分类清晰:
📌.service:系统服务(最常用)
📌.socket:进程通信插槽,管控低频延迟服务
📌.target:服务群组,对标 runlevel 运行等级
📌.mount/.automount:文件系统自动挂载
📌.path:文件/目录监听触发服务(如打印队列)
📌.timer:高精度定时任务(替代 crond)

三、运维高频:systemctl 核心实操命令

所有 systemd 管控,全部统一用 systemctl,是日常敲得最多的命令。

1. 服务启停 & 自启管理

systemctl start 服务名  # 启动

systemctl stop 服务名   # 关闭

systemctl restart 服务名 # 重启

systemctl reload 服务名  # 热重载(不中断业务)

systemctl enable 服务名  # 开机自启

systemctl disable 服务名 # 关闭自启

systemctl status 服务名  # 查看详细状态

2. 服务实时运行状态

✅ active(running):正常运行中
✅ active(exited):一次性任务,执行完毕退出
✅ active(waiting):运行中,等待依赖/事件
❌ inactive:服务未启动、已关闭

3. 服务开机自启状态

enabled:开机自启
disabled:开机不启动
static:无自启,仅可被依赖/手动启动
mask:强制锁定,彻底无法启动(需 unmask 解锁)

4. 系统环境 Target 管理

对标老式 runlevel,生产最常用 2 个:
multi-user.target → 文本模式(runlevel 3)
graphical.target → 图形模式(runlevel 5)
环境切换命令

systemctl get-default  # 查看默认开机环境

systemctl set-default 目标.target  # 设置默认环境

systemctl isolate 目标.target  # 实时切换,无需重启

5. 电源、休眠、救援模式

systemctl poweroff   # 关机

systemctl reboot     # 重启

systemctl suspend    # 待机(内存保活、秒唤醒)

systemctl hibernate  # 休眠(落盘断电)

systemctl rescue     # 救援模式

systemctl emergency  # 紧急修复模式

6. 服务依赖排查

systemctl list-dependencies 服务名 # 查看依赖的服务

systemctl list-dependencies 服务名 --reverse # 反向查谁依赖它


四、进阶核心:systemd 配置文件详解

💡运维规范:绝不直接改系统默认配置!
自定义配置统一放在:/etc/systemd/system/服务名.service.d/*.conf

1. 配置三大模块(必考)

【Unit】依赖与描述

Description:服务描述
After/Before:控制服务启动先后时序
Requires:强依赖(依赖挂,当前服务必挂)
Wants:弱依赖(依赖挂,不影响当前服务)
Conflicts:服务互斥,无法同时启动

【Service】运行规则

Type 启动类型
simple:默认,常驻内存服务
forking:父启子、父退出,子常驻(传统服务通用)
oneshot:一次性执行,执行即退出
idle:系统空闲后启动(仅开机生效)
核心指令
ExecStartPre/ExecStart/ExecStartPost:启动前/中/后执行命令
ExecStop:关闭执行命令
ExecReload:重载配置命令
Restart:异常退出自动重启
TimeoutSec:启停超时强制终止时间

【Install】自启挂载

WantedBy:挂载到指定 target,实现开机自启
Also:同步启停关联服务
Alias:服务别名

2. 关键命令区分(高频坑点)

systemctl daemon-reload 
    刷新 systemd 系统缓存,让系统识别新的服务配置
systemctl reload 
    服务名让业务程序热加载自身配置,不重启服务、不中断业务

五、高阶定时:systemd timer 替代 crond

systemd timer 是新一代定时方案,比 crond精度更高、日志更全、排错更简单。

1. 优缺点

✅ 支持毫秒级精度、可限制资源、日志完整
❌ 无邮件告警、无随机延时功能

2. 使用前提

1. timer.target 正常启动
2. 成对配置:xxx.service(任务)+ xxx.timer(定时规则)

3. 常用定时参数

OnBootSec:开机延后多久执行
OnUnitActiveSec:服务启动后间隔循环执行
OnCalendar:日历精准定时(最常用)
Persistent:开机补跑关机错过的任务

4. 极简定时示例

daily → 每天零点
hourly → 每小时
3h → 每3小时
*-*-* 02:00:00 → 每天凌晨2点

六、全文总结:两代机制核心对比

帮大家把知识点彻底收拢,一眼看懂差异:
1️⃣启动方式:System V 串行慢启动|systemd 并行极速启动
2️⃣依赖管理:System V 无自动依赖|systemd 自动解析拉起依赖
3️⃣服务分类:System V 仅2类|systemd 多unit精细化管理
4️⃣环境管理:System V 依赖runlevel|systemd 依托target群组
5️⃣定时能力:依赖crond、精度差|原生timer、高精度可追溯
6️⃣运维体验:脚本繁琐、不统一|systemctl统一命令、高效易排障
systemd 是目前 Linux 运维的绝对核心,吃透它,搞定开机、服务、定时绝大多数场景!

最新文章

随机文章