systemd介绍
概述
systemd 是 Linux 系统的一组基本构建模块。它提供了一个系统和服务管理器,以 PID 1 运行并启动系统的其余部分。systemd 提供强大的并行化能力,使用套接字和 D-Bus 激活来启动服务,提供按需启动守护进程,使用 Linux 控制组跟踪进程,维护挂载点和自动挂载点,并实现复杂的基于事务依赖的服务控制逻辑。systemd 支持 SysV 和 LSB 初始化脚本,并可替代 sysvinit。其他部分包括一个日志守护进程、用于控制基本系统配置(如主机名、日期、区域设置)的实用程序、维护登录用户列表以及正在运行的容器和虚拟机、系统账户、运行时目录和设置,以及用于管理简单网络配置、网络时间同步、日志转发和名称解析的守护进程。
他是一个大而全的系统,包含了很多功能,可以如下图所示:
主要的一些功能有:
- 服务管理:systemd可以启动、停止、重启、查看服务的状态,还可以设置服务的依赖关系。
- 日志管理:systemd通过
journalctl
命令可以查看系统日志,支持按服务、时间、优先级等条件过滤。 - 定时任务:systemd可以替代cron,通过
systemd-timer
实现定时任务的管理。 - 系统初始化:systemd负责系统的初始化,包括加载内核模块、挂载文件系统、启动用户空间进程等。
- 用户会话:systemd可以管理用户会话,包括用户登录、注销、会话控制等。
- 内核管理:包括cgroups、kdbus、autofs等
- 网络管理:systemd-networkd可以管理网络配置,systemd-resolved可以管理DNS解析。
- 设备管理:systemd可以管理设备,包括磁盘、网络、USB等设备。
- cgroup管理:systemd可以管理cgroup,实现资源限制和控制。
基本概念
单元(Unit)
systemd中的所有配置都是以单元(Unit)的形式存在,单元是systemd的基本配置单位,用于描述系统中的各种资源。常见的单元类型包括:
- 服务单元(Service Unit):用于描述一个服务,如Nginx、MySQL等。
- 定时器单元(Timer Unit):用于描述一个定时任务。
- 设备单元(Device Unit):用于描述一个设备。
- 挂载单元(Mount Unit):用于描述一个文件系统挂载点。
- 路径单元(Path Unit):用于描述一个文件或目录的监控。
- 网络单元(Network Unit):用于描述一个网络配置。
- …
单元的配置文件通常存放在/etc/systemd/system/
目录下,以.service
、.timer
、.device
等后缀结尾。
服务单元(Service Unit)
服务单元(Service Unit)用于描述一个服务,包括服务的启动、停止、重启、状态等操作。服务单元的配置文件通常以.service
为后缀,如nginx.service
、mysql.service
等。
服务单元的配置文件通常包含以下几个部分:
[Unit]
:描述单元的基本信息,如单元的描述、依赖关系等。[Service]
:描述服务的具体配置,如服务的启动命令、环境变量、工作目录等。[Install]
:描述单元的安装信息,如单元的启动级别、依赖关系等。
一个简单的服务单元配置文件示例如下:
[Unit] |
日志管理
systemd 使用systemd-journald
守护进程来管理系统日志。systemd-journald
守护进程会将日志信息保存在/run/log/journal
目录下,日志信息以二进制格式存储。我们可以使用journalctl
命令来查看系统日志,如:
# 查看所有日志 |
定时任务
systemd 可以通过定时器单元(Timer Unit)实现定时任务的管理。定时器单元的配置文件通常以.timer
为后缀,如my-task.timer
。
一个简单的定时器单元配置文件示例如下:
[Unit] |
服务管理
systemd 可以管理系统的服务,包括启动、停止、重启、查看状态等。我们可以使用systemctl
命令管理系统的服务,如:
# 启动服务 |
系统初始化
systemd 负责系统的初始化,包括加载内核模块、挂载文件系统、启动用户空间进程等。systemd 会在启动时读取/etc/systemd/system/default.target
文件,根据该文件指定的目标(Target)启动系统。
常见的系统目标包括:
multi-user.target
:多用户目标,用于启动多用户模式。graphical.target
:图形目标,用于启动图形界面。rescue.target
:救援目标,用于修复系统。emergency.target
:紧急目标,用于进入紧急模式。
我们可以使用systemctl set-default
命令设置系统的默认目标,如:
# 设置系统默认目标为 multi-user.target |
用户会话
systemd 可以管理用户会话,包括用户登录、注销、会话控制等。用户会话的配置文件通常存放在~/.config/systemd/user/
目录下。
我们可以使用systemctl --user
命令管理用户会话,如:
# 启动用户会话中的服务 |
内核管理
systemd 包括对 cgroups、kdbus、autofs 等内核功能的管理。cgroups 是 Linux 内核提供的一种资源管理机制,用于限制和控制进程组的资源使用。systemd 可以通过 cgroups 实现对进程的资源限制和控制。
网络管理
systemd-networkd 可以管理网络配置,包括网络接口、IP 地址、路由、DNS 等。我们可以使用systemctl start systemd-networkd
命令启动 systemd-networkd 服务,使用systemctl enable systemd-networkd
命令设置 systemd-networkd 服务开机自启动。
systemd-resolved 可以管理 DNS 解析,包括 DNS 缓存、DNS 服务器、DNS 查询等。我们可以使用systemctl start systemd-resolved
命令启动 systemd-resolved 服务,使用systemctl enable systemd-resolved
命令设置 systemd-resolved 服务开机自启动。
设备管理
systemd 可以管理设备,包括磁盘、网络、USB 等设备。我们可以使用systemctl start systemd-udevd
命令启动 systemd-udevd 服务,使用systemctl enable systemd-udevd
命令设置 systemd-udevd 服务开机自启动。
cgroup 管理
systemd 可以管理 cgroup,实现资源限制和控制。cgroup 是 Linux 内核提供的一种资源管理机制,用于限制和控制进程组的资源使用。我们可以使用systemctl set-property
命令设置 cgroup 的资源限制,如:
# 设置进程的 CPU 限制 |
常用命令
systemctl
systemctl
命令用于管理 systemd 服务。常用的选项包括:
start
:启动服务。stop
:停止服务。restart
:重启服务。status
:查看服务状态。enable
:设置服务开机自启动。disable
:取消服务开机自启动。daemon-reload
:重新加载 systemd 配置。
journalctl
journalctl
命令用于查看系统日志。常用的选项包括:
-u
:按服务过滤日志。--since
:按时间范围过滤日志。-p
:按优先级过滤日志。-k
:查看内核日志。-b
:查看引导日志。-f
:实时查看日志。
总结
systemd 是 Linux 系统的一组基本构建模块,提供了强大的系统和服务管理功能。通过 systemd,我们可以管理系统的服务、日志、定时任务、系统初始化、用户会话、内核、网络、设备、cgroup 等。熟练掌握 systemd 的使用,有助于提高系统管理的效率和可靠性。