重要
Linux 服务管理经历三代:init(串行启动)→ service(init 的脚本封装)→ systemd(并行启动 + Unit 统一管理)。2015 年后新发行版默认使用 systemd,向下兼容 System V init。
1. init(System V init)
init 是内核加载后启动的第一个进程(PID=0)。所有服务启动脚本放在 /etc/init.d/ 下,init 按顺序串行执行。
| |
缺点:
- 启动时间长——服务串行启动
- 脚本需自行处理启动之外的情况(重启、状态检查等)
2. service
service 命令是对 /etc/init.d/ 脚本的封装,功能与 init 相同。
| |
本质上 service 就是 init 的命令行封装,没有独立的进程管理能力。
3. systemd
systemd 是 2015 年后主流发行版(Ubuntu 15.04+、RHEL 7+)的默认 init 系统。systemd 作为 PID=1 的第一个进程,取代了传统的 init。
核心改进:
| 对比 | init | systemd |
|---|---|---|
| 启动方式 | 串行 | 并行,按依赖关系启动 |
| 管理对象 | 仅服务脚本 | 所有系统资源(Unit) |
| 日志 | 各服务独立 | 统一 journald |
| PID | 0 | 1 |
3.1 常用命令
系统管理:
| 命令 | 作用 |
|---|---|
systemctl reboot | 重启 |
systemctl poweroff | 关机 |
hostnamectl set-hostname hex | 设置主机名 |
timedatectl set-timezone Asia/Shanghai | 设置时区 |
localectl set-locale LANG=en_GB.utf8 | 设置语言 |
服务管理:
| |
启动耗时分析:
| |
用户会话:
| |
3.2 Unit 概念
systemd 将所有系统资源抽象为 Unit:
| Unit 类型 | 后缀 | 用途 |
|---|---|---|
| Service | .service | 系统服务 |
| Socket | .socket | 进程间通信 socket |
| Target | .target | 一组 Unit 的集合(类似运行级别) |
| Timer | .timer | 定时任务(替代 cron) |
3.3 日志管理
systemd 使用 journald 统一管理所有 Unit 日志,配置文件 /etc/systemd/journald.conf。
| |