Loading... ## 前言 Linux 传统上使用 init 进程启动系统,采用串行启动方式,导致启动时间长且脚本复杂。为解决这些问题,Systemd 应运而生,提供了一套完整的系统启动和管理解决,现在已成为大多数发行版的标准配置。由于其在Linux中十分常用,特此写一篇教程以方便自己在未来查阅。 ## 1. Systemd 概述 Systemd 是一个守护进程,用于启动和管理系统的各项服务。它取代了 init 进程,成为系统的第一个进程(PID 为 1),其他进程都是它的子进程。 ```bash $ systemctl --version # 查看 Systemd 版本 ``` ## 2. 系统管理命令 * **systemctl** :Systemd 的主命令 ```bash $ sudo systemctl reboot # 重启系统 $ sudo systemctl poweroff # 关闭系统 $ sudo systemctl halt # 停止 CPU 工作 $ sudo systemctl suspend # 暂停系统 $ sudo systemctl hibernate # 系统进入冬眠 $ sudo systemctl hybrid-sleep # 交互式休眠 $ sudo systemctl rescue # 进入救援状态 ``` * **systemd-analyze** :查看启动耗时 ```bash $ systemd-analyze # 查看启动耗时 $ systemd-analyze blame # 每个服务启动耗时 $ systemd-analyze critical-chain # 瀑布状启动过程流 ``` * **hostnamectl** :查看和设置主机名 ```bash $ hostnamectl # 查看当前主机信息 $ sudo hostnamectl set-hostname rhel7 # 设置主机名 ``` * **localectl** :查看和设置本地化参数 ```bash $ localectl # 查看本地化设置 $ sudo localectl set-locale LANG=en_GB.utf8 # 设置本地化参数 ``` * **timedatectl** :查看和设置时区 ```bash $ timedatectl # 查看当前时区设置 $ sudo timedatectl set-timezone America/New_York # 设置时区 ``` * **loginctl** :查看当前登录用户 ```bash $ loginctl list-sessions # 列出当前 session $ loginctl list-users # 列出当前登录用户 ``` ## 3. Unit ### 3.1 Unit含义 Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。 Unit 一共分成12种。 * Service unit:系统服务 * Target unit:多个 Unit 构成的一个组 * Device Unit:硬件设备 * Mount Unit:文件系统的挂载点 * Automount Unit:自动挂载点 * Path Unit:文件或路径 * Scope Unit:不是由 Systemd 启动的外部进程 * Slice Unit:进程组 * Snapshot Unit:Systemd 快照,可以切回某个快照 * Socket Unit:进程间通信的 socket * Swap Unit:swap 文件 * Timer Unit:定时器 ### 3.2 用户级unit的启动方式 用户级unit不像系统级unit那样随系统启动,而是与用户的会话关联,只有在用户登录时才会启动。用户级unit通常挂载在`default.target`下,这与系统级unit通常挂载在`multi-user.target`或其他target上形成对比。 ### 3.3 用户级unit的存储位置 用户自定义的unit文件可以放置在以下几个位置: 1. `/usr/lib/systemd/user`:系统为用户提供的默认服务文件,优先级最低。 2. `~/.local/share/systemd/user`:用户级服务的一般存放位置。 3. `/etc/systemd/user`:为所有用户提供服务的全局位置。 4. `~/.config/systemd/user`:用户个人配置的服务文件,优先级最高。 ### 3.4 Unit 管理 Unit 是 Systemd 管理的基本单位,包括服务、挂载点、定时器等。 * **查看 Unit** : ```bash $ systemctl list-units # 列出正在运行的 Unit ``` * **查看 Unit 状态** : ```bash $ systemctl status # 查看系统状态 $ systemctl status nginx.service # 查看 nginx 服务状态 ``` * **管理 Unit** : ```bash $ sudo systemctl start nginx # 启动 nginx 服务 $ sudo systemctl stop nginx # 停止 nginx 服务 $ sudo systemctl restart nginx # 重启 nginx 服务 ``` * **查看 Unit 依赖** : ```bash $ systemctl list-dependencies nginx.service # 查看 nginx 依赖 ``` ### 3.5 Unit 配置文件 每个 Unit 都有配置文件,通常位于 `/etc/systemd/system/` 或 `/usr/lib/systemd/system/`。 * **查看和修改配置文件** : ```bash $ systemctl cat nginx.service # 查看配置文件内容 $ sudo systemctl daemon-reload # 重新加载配置文件 $ sudo systemctl restart nginx # 重新启动服务 ``` 配置文件包含多个区块(如 `[Unit]`、`[Service]`),定义了 Unit 的元数据和启动参数。 ## 4. Target Target 是一组 Unit,用于定义系统的运行级别。通过 target,可以方便地启动或切换系统状态。 * **管理 Target** : ```bash $ systemctl list-unit-files --type=target # 列出所有 Target $ sudo systemctl set-default multi-user.target # 设置默认 Target ``` ## 5. 日志管理 Systemd 统一管理所有 Unit 的日志,通过 `journalctl` 命令查看。 * **查看日志** : ```bash $ sudo journalctl # 查看所有日志 $ sudo journalctl -u nginx.service # 查看 nginx 服务日志 $ sudo journalctl -b # 查看本次启动日志 ``` 最后修改:2024 年 06 月 24 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 你的支持是我最大的动力