概述
systemd 在高效管理系统启动过程、监控运行中的服务以及控制系统各种状态方面发挥着核心作用。与 init 顺序执行脚本的方式不同,systemd 基于依赖关系并行处理服务,从而大大提高了启动速度。这是现代 Linux 系统性能和稳定性的重要贡献因素。
主要特点
systemd 的主要特点如下:
- 并行启动: 服务依赖分析,同时运行多个服务,缩短启动时间。
- 集成管理: 统一管理系统启动、服务、设备、日志等各种元素。
- 服务监控: 服务失败时自动重启,有助于稳定运行。
- 替代运行级别: 引入 'target' 概念替代运行级别 (runlevel),用于控制系统状态。
与 init 的关系
systemd 是传统 init 系统的继任者和替代者。它继承了 init 负责的系统启动和关闭任务,并增加了更优的功能。
- init: 第一个运行的进程,启动时参考 `/etc/inittab` 文件,根据运行级别顺序执行脚本。
- systemd: 同样是 PID 1 进程,但使用 'target' 而非运行级别,基于依赖关系并行处理服务,更快更灵活。
- 兼容性: 在大多数现代 Linux 系统中,init 通常是 systemd 的符号链接,因此即使使用 init 命令,systemd 也会代替执行。
核心概念
理解 systemd 必不可少的核心概念。
单元 (Unit)
systemd 管理的所有对象(服务、挂载点、设备等)都定义为 '单元'。每个单元都有一个定义特定任务的配置文件(如 `*.service`、`*.mount` 等)。
- 服务单元: 管理像 Web 服务器 (nginx.service) 或数据库 (mysql.service) 这样的后台进程。
- 目标单元: 用于将多个单元分组。它替代了运行级别概念,例如 'multi-user.target' 指多用户模式,'graphical.target' 指图形模式。
- 挂载单元: 管理文件系统挂载点。
systemctl
用于控制 systemd 的主要命令行工具。用于启动、停止、重启服务或检查单元状态。
- 启动服务: sudo systemctl start nginx
- 检查服务状态: sudo systemctl status nginx
- 系统重启: sudo systemctl reboot
journalctl
用于查询 systemd 统一管理的系统日志的命令。可以按服务、时间、优先级过滤日志。
- 查看所有日志: journalctl
- 查看特定服务日志: journalctl -u nginx.service
- 实时查看日志: journalctl -f
使用示例
systemd 核心命令 systemctl 和 journalctl 的使用示例。
检查系统启动目标
systemctl get-default
检查系统以哪个目标启动。
关闭系统
sudo systemctl poweroff
通过 systemd 安全地关闭系统。与 poweroff 命令功能相同。
启用/禁用特定服务
sudo systemctl enable nginx
sudo systemctl disable nginx
设置特定服务在系统启动时自动启动或禁用。
重启服务
sudo systemctl restart nginx
重启正在运行的 Web 服务器服务。在更改配置文件时很有用。
提示与注意事项
使用 systemd 时应了解的要点。
提示
- systemd 的单元文件主要位于 `/etc/systemd/system/` 或 `/lib/systemd/system/` 目录下。
- systemd 集成管理大多数启动/关闭相关命令。因此,`halt`、`reboot`、`poweroff` 等命令通常是 `systemctl` 的符号链接。
- 使用 `systemctl status` 命令可以一次性查看服务状态和最新日志。