启动流程与系统服务
从按下电源到服务可用,系统经历固件、引导加载器、内核初始化、服务管理器和应用启动。理解启动流程能帮助排查无法开机、服务起不来和依赖顺序问题。
# 1. 学习目标
- 理解 BIOS/UEFI、Bootloader、内核、init/systemd/launchd/Service Control Manager 的职责。
- 能排查系统启动失败和服务启动失败。
- 能设计可靠的服务自启动、依赖和恢复策略。
# 2. 知识框架
启动流程与系统服务
├─ 入门:建立术语、对象和日常操作的直觉
├─ 进阶:理解机制、边界和跨平台差异
└─ 专家:能排障、能设计、能阅读实现和研究材料
启动链路是一条依赖链:固件找到启动介质,引导器加载内核,内核初始化硬件和根文件系统,服务管理器拉起系统服务和业务进程。
# 3. 核心概念
| 主题 | 说明 | 工程关注 |
|---|---|---|
| 固件 | BIOS 或 UEFI,完成硬件初始化并寻找启动项 | 启动顺序、安全启动 |
| 引导加载器 | 加载内核和初始内存盘 | GRUB、Windows Boot Manager |
| 服务管理器 | 管理后台服务生命周期 | systemd、launchd、Windows SCM |
| 健康恢复 | 服务异常退出后的重启、限流和告警 | 高可用、避免重启风暴 |
# 4. 机制与实践
- 服务配置要明确依赖、工作目录、环境变量、日志位置和重启策略。
- 启动失败时先看服务管理器状态,再看应用日志和系统日志。
- 重要服务要配置健康检查、启动超时、失败退避和告警。
# 5. 常用命令与工具
| 命令或工具 | 作用 | 使用建议 |
|---|---|---|
systemctl status service | 查看 Linux systemd 服务状态 | 排查启动失败入口 |
launchctl list | 查看 macOS launchd 任务 | 定位后台任务状态 |
sc query service | 查看 Windows 服务状态 | 排查服务是否运行 |
# 6. 常见误区
- 只在命令行能启动:服务环境变量、工作目录、用户权限和终端环境可能不同。
- 失败后无限重启:重启风暴会放大故障,应设置退避和限频。
- 忽略启动依赖:数据库、网络、磁盘挂载未就绪时业务服务可能提前失败。
# 7. 进阶研究方向
- 阅读 systemd unit、target、journal 和依赖模型。
- 比较 launchd plist 与 Windows 服务模型。
- 设计一次主机重启后的服务恢复演练。
# 8. Tips 快问快答
Q:为什么手动运行正常,服务启动失败?
A:服务环境与登录 Shell 不同,常见差异包括路径、权限、环境变量和工作目录。
Q:systemd 的 restart 策略有什么风险?
A:配置不当会导致失败服务反复重启,消耗资源并干扰排障。
Q:启动问题第一步看什么?
A:先看服务管理器状态和系统日志,再看应用自己的日志。
# 9. 总结
启动和服务管理把系统从“能开机”推进到“服务可用”。理解它能让你更稳地管理守护进程、自启动、恢复和故障排查。
上次更新: 2026/06/25, 10:02:19