前言
Linux 传统上使用 init 进程启动系统,采用串行启动方式,导致启动时间长且脚本复杂。为解决这些问题,Systemd 应运而生,提供了一套完整的系统启动和管理解决,现在已成为大多数发行版的标准配置。由于其在Linux中十分常用,特此写一篇教程以方便自己在未来查阅。
1. Systemd 概述
Systemd 是一个守护进程,用于启动和管理系统的各项服务。它取代了 init 进程,成为系统的第一个进程(PID 为 1),其他进程都是它的子进程。
$ systemctl --version # 查看 Systemd 版本
2. 系统管理命令
- systemctl :Systemd 的主命令
$ 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 :查看启动耗时
$ systemd-analyze # 查看启动耗时
$ systemd-analyze blame # 每个服务启动耗时
$ systemd-analyze critical-chain # 瀑布状启动过程流
- hostnamectl :查看和设置主机名
$ hostnamectl # 查看当前主机信息
$ sudo hostnamectl set-hostname rhel7 # 设置主机名
- localectl :查看和设置本地化参数
$ localectl # 查看本地化设置
$ sudo localectl set-locale LANG=en_GB.utf8 # 设置本地化参数
- timedatectl :查看和设置时区
$ timedatectl # 查看当前时区设置
$ sudo timedatectl set-timezone America/New_York # 设置时区
- loginctl :查看当前登录用户
$ 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文件可以放置在以下几个位置:
/usr/lib/systemd/user
:系统为用户提供的默认服务文件,优先级最低。~/.local/share/systemd/user
:用户级服务的一般存放位置。/etc/systemd/user
:为所有用户提供服务的全局位置。~/.config/systemd/user
:用户个人配置的服务文件,优先级最高。
3.4 Unit 管理
Unit 是 Systemd 管理的基本单位,包括服务、挂载点、定时器等。
- 查看 Unit :
$ systemctl list-units # 列出正在运行的 Unit
- 查看 Unit 状态 :
$ systemctl status # 查看系统状态
$ systemctl status nginx.service # 查看 nginx 服务状态
- 管理 Unit :
$ sudo systemctl start nginx # 启动 nginx 服务
$ sudo systemctl stop nginx # 停止 nginx 服务
$ sudo systemctl restart nginx # 重启 nginx 服务
- 查看 Unit 依赖 :
$ systemctl list-dependencies nginx.service # 查看 nginx 依赖
3.5 Unit 配置文件
每个 Unit 都有配置文件,通常位于 /etc/systemd/system/
或 /usr/lib/systemd/system/
。
- 查看和修改配置文件 :
$ systemctl cat nginx.service # 查看配置文件内容
$ sudo systemctl daemon-reload # 重新加载配置文件
$ sudo systemctl restart nginx # 重新启动服务
配置文件包含多个区块(如 [Unit]
、[Service]
),定义了 Unit 的元数据和启动参数。
4. Target
Target 是一组 Unit,用于定义系统的运行级别。通过 target,可以方便地启动或切换系统状态。
- 管理 Target :
$ systemctl list-unit-files --type=target # 列出所有 Target
$ sudo systemctl set-default multi-user.target # 设置默认 Target
5. 日志管理
Systemd 统一管理所有 Unit 的日志,通过 journalctl
命令查看。
- 查看日志 :
$ sudo journalctl # 查看所有日志
$ sudo journalctl -u nginx.service # 查看 nginx 服务日志
$ sudo journalctl -b # 查看本次启动日志
12 条评论
真棒!
真好呢
你的文章内容非常用心,让人感动。 https://www.yonboz.com/video/42367.html
你的文章充满了欢乐,让人忍不住一笑。 https://www.yonboz.com/video/59456.html
你的文章让我心情愉悦,真是太棒了! https://www.yonboz.com/video/21272.html
哈哈哈,写的太好了https://www.cscnn.com/
看的我热血沸腾啊www.jiwenlaw.com
想想你的文章写的特别好https://www.237fa.com/
怎么收藏这篇文章?
不错不错,我喜欢看 https://www.jiwenlaw.com/
想想你的文章写的特别好
博主真是太厉害了!!!