Linux进程服务与systemd
systemd 是大多数现代 Linux 发行版的服务管理核心。它负责启动服务、管理依赖、收集日志、监控状态和处理失败恢复。
# 1. 学习目标
- 掌握 systemd unit、service、target、journal 的基本概念。
- 能编写和排查简单服务配置。
- 能定位服务启动失败、反复重启和环境差异问题。
# 2. 知识框架
Linux进程服务与systemd
├─ 入门:建立术语、对象和日常操作的直觉
├─ 进阶:理解机制、边界和跨平台差异
└─ 专家:能排障、能设计、能阅读实现和研究材料
systemd 把服务生命周期配置化:何时启动、依赖谁、以谁运行、失败怎么办、日志去哪,都可以在 unit 中声明。
# 3. 核心概念
| 主题 | 说明 | 工程关注 |
|---|---|---|
| Unit | systemd 管理的基本对象 | service、timer、socket、mount |
| Service | 后台服务配置单元 | ExecStart、User、Restart |
| Target | 一组 unit 的启动目标 | 系统运行级别替代模型 |
| Journal | systemd 日志系统 | 统一查看服务和系统日志 |
# 4. 机制与实践
- 服务文件中显式声明 User、WorkingDirectory、EnvironmentFile 和 Restart 策略。
- 用 systemctl status 和 journalctl 结合查看失败原因。
- 更新 unit 后执行 daemon-reload,再重启服务。
# 5. 常用命令与工具
| 命令或工具 | 作用 | 使用建议 |
|---|---|---|
systemctl status nginx | 查看服务状态 | 确认是否运行和最近日志 |
journalctl -u nginx -f | 实时查看服务日志 | 排查启动和运行错误 |
systemctl daemon-reload | 重新加载 unit 文件 | 修改服务文件后执行 |
# 6. 常见误区
- 修改 unit 后不 reload:systemd 仍使用旧配置,导致改动不生效。
- 服务依赖未声明:开机时依赖未准备好,服务偶发启动失败。
- 把环境变量写在登录 Shell:systemd 服务不会自动读取交互式 Shell 配置。
# 7. 进阶研究方向
- 学习 socket activation、timer、watchdog 和 slice 资源控制。
- 研究 journald 日志持久化和采集方案。
- 设计业务服务的 systemd 单元模板和故障恢复策略。
# 8. Tips 快问快答
Q:为什么 systemctl start 和手动命令表现不同?
A:systemd 服务的用户、环境变量、工作目录和资源限制可能不同。
Q:Restart=always 是否推荐?
A:要谨慎。最好配合启动限频、健康检查和告警,避免重启风暴。
Q:journalctl 看不到历史日志怎么办?
A:可能未开启持久化,检查 /var/log/journal 和 journald 配置。
# 9. 总结
systemd 是 Linux 服务治理的核心。掌握它后,服务启动、依赖、日志和恢复策略都可以标准化。
上次更新: 2026/06/25, 10:02:19