使用 systemd 单元文件自定义和优化您的系统
大约 41 分钟
使用 systemd 单元文件自定义和优化您的系统
来源:官方文档 原始多页入口:使用 systemd 单元文件自定义和优化您的系统 内容规模:约 31,288 字符,44 个章节标题,116 个命令/代码块,8 条提示框
阅读提要
- 副标题:使用 systemd 优化系统性能和扩展配置
- 摘要:修改 systemd 单元文件并扩展默认配置,检查系统引导性能并优化 systemd 以缩短引导时间。
- 主要章节:使用 systemd 优化系统性能和扩展配置;对红帽文档提供反馈;第 1 章 使用 systemd 单元文件;第 2 章 使用 systemctl管理系统服务;第 3 章 引导至目标系统状态;第 4 章 关闭、挂起和休眠系统;第 5 章 优化 systemd 以缩短引导时间
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
使用 systemd 优化系统性能和扩展配置
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:步骤
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 使用 systemd 单元文件
- 要点:要执行管理系统资源的任务,您需要配置 systemd 单元文件。使用单元文件,您可以创建自定义单元文件、修改现有单元文件并使用实例化单元。
1.1. 单元文件简介
- 要点:要管理单元及其资源,您可以使用单元文件。几个 systemctl 命令在后台与单元文件一起工作。单元文件是硬盘中的 .service 或 .target 文件。这个单元文件有配置指令来描述这个单元并定义其属性。
- 要点:systemd 管理的基本对象是 systemd 单元,表示系统资源和服务。systemd 单元由一个名称、类型和配置文件组成,用来定义和管理特定的任务。您可以使用单元文件来配置系统行为。各种 systemd 单元类型示例如下:
- 列表:服务 :控制和管理各个系统服务。
- 列表:目标 :代表定义系统状态的一组单元。
- 列表:设备 :管理硬件设备及其可用性。
- 列表:挂载 :处理文件系统挂载.
- 列表:timer :计划在特定间隔中运行的任务。
- 列表:/usr/lib/systemd/system/ - systemd 单元文件与安装的 RPM 软件包一起分发。
- 命令/配置摘录:
<unit_name>.<type_extension>
# mkdir -p /etc/systemd/system/sshd.service.d1.2. systemd 单元文件位置
- 要点:您可以在上述目录中找到单元配置文件。
- 要点:systemd 的默认配置在编译过程中定义,您可以在 /etc/systemd/system.conf 文件中找到配置。通过编辑此文件,您可以通过全局覆盖 systemd 单元的值来修改默认配置。
- 命令/配置摘录:
DefaultTimeoutStartSec=_required value_- 表格样本(共 4 行):
- 目录 | 描述
- /usr/lib/systemd/system/ | 与安装的 RPM 软件包一起分发的 systemd 单元文件。
- /run/systemd/system/ | 在运行时创建的 systemd 单元文件。该目录优先于安装了的服务单元文件的目录。
- /etc/systemd/system/ | 使用 systemctl enable 命令创建的 systemd 单元文件,并添加用于扩展服务的单元文件。这个目录优先于带有运行时单元文件的目录。
1.3. 单元文件结构
- 要点:单元文件由三个主要部分组成,它们定义单元行为、特定于类型的指令和安装信息。了解这种结构可帮助您有效地创建和更改 systemd 单元。
- 要点:其他资源
- 列表:重要 [Unit] 部分选项
- 列表:重要 [Service] 部分选项
- 列表:重要 [Install] 部分选项
1.4. 重要 [Unit] 部分选项
- 要点:[Unit] 部分有不依赖于单元类型的通用选项。这些选项有单元描述,指定单元的行为,并将依赖项设置为其他单元。
- 表格样本(共 8 行):
- 选项 [a] | 描述
- 描述 | 单元的有意义的描述。这个文本显示在 systemctl status 命令的输出中。
- Documentation | 提供单元参考文档的 URI 列表。
- After[b] | 定义启动单位的顺序。这个单元仅在 After 中指定的单元处于活跃状态后才启动。与 Requires 不同,After 不会显式激活指定的单元。Before 选项与 After 的功能相反。
1.5. 重要 [Service] 部分选项
- 要点:要管理配置参数,用于定义服务如何与系统交互,请使用 [Service] 部分。每个 systemd 服务单元都有一个 [Service] 部分,其中包含这个单元类型的指令。
- 表格样本(共 8 行):
- 选项 [a] | 描述
- Type | 配置影响 ExecStart 和相关选项功能的单元进程启动类型。其中之一: simple: 默认值。使用 ExecStart 启动的进程是该服务的主要进程。 fork :通过 ExecStart 启动的进程会生成成为服务主进程的子进程。父进程在启动完成后会退出。 oneshot :此类型与 简单 相似,但进程在启动后续单元之前退出。 dbus :此类型与 simple 类似,但只有主进程获得 D-Bus 名称后才启动该单元。 通知 :此类型与 simple 类似,但仅在主进程使用 sd_notify () 函数发送通知消息后才启动该单元。 idle :与 simple 类似,系统会延迟服务二进制文件的实际执行,直到所有作业完成为止。这可避免将状态输出与服务的标准输出混合在一起。
- ExecStart | 指定单元启动时要运行的命令或脚本。ExecStartPre 和 ExecStartPost 指定在 ExecStart 之前和之后要运行的自定义命令。type=oneshot 指定系统随后按顺序运行的多个自定义命令。
- ExecStop | 指定在单元停止时要运行的命令或脚本。
1.6. 重要 [Install] 部分选项
- 要点:[Install] 部分包含 systemctl enable 和 disable 命令使用的单元安装信息。
- 表格样本(共 7 行):
- 选项 [a] | 描述
- Alias | 为这个单元提供空格分开的额外名称列表。除 systemctl enable 以外,多数systemctl 命令可使用别名而不是实际的单元名称。
- RequiredBy | 依赖于这个单元的单元列表。当启用此单元时,在 RequiredBy 中列出的单元会获得对这个单元的一个 Require 依赖项。
- WantedBy | 依赖于这个单元的单位列表。当启用这个单元时,在 WantedBy 中列出的单元会得到一个 Want 依赖项。
1.7. 创建自定义单元文件
- 要点:要修改现有单元的属性或从头开始创建新单元,您需要创建自定义单元文件。
- 要点:您可以运行自定义守护进程或创建一些现有服务的第二个实例。详情请参阅使用 sshd 服务的第二个实例创建自定义单元文件。
- 列表:要创建自定义服务,请准备具有服务的可执行文件。该文件可以包含自定义创建的脚本,也可以是软件供应商提供的可执行文件。
- 列表:若要管理自定义服务,请准备 PID 文件,以保存自定义服务主进程的恒定 PID。您还可以包含环境文件来存储服务的 shell 变量。确保源脚本是可执行的(通过执行 chmod a+x)且不是交互的。
- 列表:您有管理特权。
- 列表:在 /etc/systemd/system/ 目录中创建一个单元文件: # touch /etc/systemd/system/<name>.service
- 列表:对单元文件应用只读权限: # chmod 664 /etc/systemd/system/<name>.service 将 <name> 替换为您要创建的服务的名称。
- 列表:打开创建的 & lt;name > .service 文件,并添加服务配置选项。您可以根据您要创建的服务类型使用各种选项,请参阅 单元文件结构。 以下是网络相关服务的单元配置示例: [Unit] Description=<service_description> After=network.target [Service] ExecStart=<path_to_executable> Type=forking PIDFile=<path_to_pidfile> [Install] WantedBy=default.target <service_description> 是一个信息性描述,显示在 journal 日志文件和 sys…
- 命令/配置摘录:
# touch /etc/systemd/system/<name>.service
# chmod 664 /etc/systemd/system/<name>.service- 注意:重要 在创建新单元文件或修改现有单元文件后,总是要运行 systemctl daemon-reload 命令。否则,systemctl start 或 systemctl enable 可能会因为磁盘上的 systemd 和服务单元文件状态不匹配而失败。有大量单元的系统可能需要很长时间才能重新载入。这是因为每个单元的状态都是序列化的,然后在重新载入过程中反序列化。
1.8. 使用 sshd 服务的第二个实例创建自定义单元文件
- 要点:要配置并运行服务的多个实例,您可以创建原始服务配置文件的副本。然后,修改某些参数以避免与服务的主实例冲突。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:已安装 sshd 服务。
- 列表:创建第二个守护进程将使用的 sshd_config 文件的一个副本: # cp /etc/ssh/sshd_config /etc/ssh/sshd-second_config
- 列表:编辑 sshd-second_config 文件,为第二个守护进程分配不同的端口号和 PID 文件: Port 22220 PidFile /var/run/sshd-second.pid 有关 Port 和 PidFile 选项,请参阅 sshd_config (5) 手册页。确保请求的端口没有被其他服务使用。在运行该服务前,PID 文件不一定存在,它会在服务启动时自动生成。
- 列表:为 sshd 服务创建 systemd 单元文件的一个副本: # cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd-second.service
- 列表:编辑创建的 sshd-second.service 文件: 修改 Description 选项: # vi /etc/systemd/system/sshd-second.service Description=OpenSSH server second instance daemon 将 sshd.service 添加到 After 选项中指定的服务中,以便第二个实例仅在第一个实例启动后启动: After=syslog.target network.target auditd.service sshd.service 删除 ExecStartPre=/usr/sbin/sshd-keygen 行,sshd 的第一个实例包括密钥生…
- 命令/配置摘录:
# cp /etc/ssh/sshd_config /etc/ssh/sshd-second_config
Port 22220 PidFile /var/run/sshd-second.pid1.9. 查找 systemd 服务描述和依赖项
- 要点:要发现服务描述和依赖项,您可以使用 systemctl show <example_service_name> 命令。您还可以使用 systemctl list-dependencies 命令列出依赖项 <example_service_name>。
- 要点:要查找服务的描述,您可以使用以 #description 开头的行。将此描述与单元文件 [Unit] 部分中的 Description 选项中的服务名称一起使用。标头可能在 #Short-Description 和 #Description 行包含类似的数据。
- 命令/配置摘录:
# grep -i "Required-Start\|Required-Stop\|Default-Start\|Default-Stop" /etc/init.d/<example_service_name>- 表格样本(共 5 行):
- LSB 选项 | 等效的单元文件 | 描述
- required-Stop,Should-Stop | Conflicts | 包括负依赖项。
- Provides | - | 指定服务的引导工具名称,可在其他初始化脚本中引用(使用"$"前缀)。因为单元文件根据文件名指向其他单元,所以不再需要这个操作。
- Required-Start | After, Before | 包括所需服务的引导工具名称。这被转换为一个排序依赖关系,引导工具名被替换为其所属的相应服务或目标的单元文件名。例如,如果是 myservice,$network 上的 Required-Start 依赖项转换为 network.target 上的 After 依赖项。
1.10. 查找服务的默认目标
- 要点:您需要定义服务应该启动的默认 systemd 目标。在 SysV init 脚本中,检查服务脚本或 Linux Standard Base(LSB)标头中的 #chkconfig 或 #Default-Start 等行。
- 要点:运行级别对应于默认的 systemd 目标。在 systemd 中,运行级别 2、3 和 5 映射到 multi-user.target 和 graphical.target。运行级别 4 映射到自定义或用户定义的目标。在单元文件的 [Install] 部分的 WantedBy 选项中指定这些目标,以控制服务默认何时启动。因为 graphical.target 依赖于 multi-user.target,您也可以为用于在图形环境中运行的服务指定 graphical.target。另外,检查 #Default-Stop 来识别要默认停止该服务的目标。#chkconfig 行里指定的其他两个值代表初始化脚本的启动和关闭优先级。如果 systemd 加载初始化脚本,则这些值由 systemd 解释,但没有等价的单元文件。
1.11. 查找该服务使用的文件
- 要点:您需要查看 init 脚本或 systemd 单元文件,以查找服务使用的文件。在初始化脚本或 systemd 单元文件中查找配置文件、环境文件、PID 文件和可执行文件的引用。
- 要点:初始化脚本标头不包括到可执行程序的路径,以及服务所需的其他依赖文件。在以前的 Red Hat Enterprise Linux 版本中,init 脚本使用 Bash 问题单。此 Bash 声明定义服务在默认操作上的行为。它包括默认操作,如 start、stop 或 restart,以及自定义操作。以下来自 example_service init 脚本的摘录显示了在服务启动时执行的代码块。
- 列表:在传统初始化脚本中,检查载入功能库、源配置文件或指定环境和 PID 文件的行。在标头中经常使用 #config 和 #pidfile。
- 列表:在 systemd 单元文件中,检查用于环境配置的 EnvironmentFile= 和 PIDFile= 等选项。ExecStart=, ExecStartPre=,以及其他相关的指令显示服务调用的可执行文件或脚本。
- 列表:此外,查看这些脚本和指令中提到的路径和文件名,以识别服务在其操作期间使用的所有文件。
- 命令/配置摘录:
conf_check() { [ -x /usr/sbin/myservice ] || exit 5 [ -d /etc/myservice ] || exit 6 [ -d /var/spool/myservice ] || exit 5 } make_aliasesdb() { if [ "$(/usr/sbin/postconf -h alias_database)" == "hash:/etc/aliases" ] then # /etc/aliases.db might be used by other MTA, make sure nothing # has touched it since our last newaliases call [ /etc/aliases -nt /etc/aliases.db ] || [ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] || [ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return /usr/bin/newaliases touch -r /etc/aliases.db "$ALIASESDB_STAMP" else /usr/bin/newaliases fi } start() { [ "$EUID" != "0" ] && exit 4 # Check that networking is u…1.12. 修改现有单元文件
- 要点:要在不从头开始创建新配置的情况下自定义和优化服务,您可以修改现有单元文件。如果要修改现有单元文件,请进入 /etc/systemd/system/ 目录。
- 要点:不要修改 /usr/lib/systemd/system/ 目录中的单元文件。
- 列表:您有管理特权。
- 列表:在 /etc/systemd/system/<unit>.d/ 中为补充配置文件创建一个目录。您可以使用额外的功能扩展默认配置,同时仍然指向原始单元文件。因此,软件包升级引入的默认单元的更改会被自动应用。详情请参阅扩展默认单元配置。
- 列表:从 /etc/systemd/system/ 目录中的 /usr/lib/systemd/system/ 目录创建一个原始单元文件副本,并在其中进行更改。这个副本会覆盖原始文件,因此不会应用软件包更新带来的更改。这个方法对无论软件包更新都应保留的重要单元更改都很有用。详情请参阅 覆盖默认单元配置。 要返回单元的默认配置,请删除自定义创建的配置文件和 /etc/systemd/system/ <unit>.d/ drop-in 目录。 对单元文件应用更改: # systemctl daemon-reload daemon-reload 选项重新加载所有单元文件,并重新创建依赖项树,这需要立即将任何更改应用到单元文件中。 如果修改后的…
- 列表:要返回单元的默认配置,请删除自定义创建的配置文件和 /etc/systemd/system/ <unit>.d/ drop-in 目录。
- 列表:对单元文件应用更改: # systemctl daemon-reload daemon-reload 选项重新加载所有单元文件,并重新创建依赖项树,这需要立即将任何更改应用到单元文件中。
- 列表:如果修改后的单元文件属于一个正在运行的服务,重启该服务: # systemctl restart <name>.service 重要 要修改由 SysV initscript 处理的服务属性,如依赖项或超时,请不要修改 initscript。反之,为服务创建一个 systemd 置入配置文件。详情请参阅扩展默认单元配置 和 覆盖默认单元配置。 要像普通 systemd 服务一样管理服务,请创建一个新目录 /etc/systemd/system/network.service.d/ 和 systemd 置入文件 /etc/systemd/system/network.service.d/<example_config.conf>。然…
- 命令/配置摘录:
# systemctl daemon-reload
# systemctl restart <name>.service- 注意:重要 要修改由 SysV initscript 处理的服务属性,如依赖项或超时,请不要修改 initscript。反之,为服务创建一个 systemd 置入配置文件。详情请参阅扩展默认单元配置 和 覆盖默认单元配置。 要像普通 systemd 服务一样管理服务,请创建一个新目录 /etc/systemd/system/network.service.d/ 和 systemd 置入文件 /etc/systemd/system/network.service.d/<example_config.conf>。然后将修改的值放到 drop-in 文件中。 systemd 服务将 network 服务识别为 network.service,因此创建的目录必须命名为 network.service.d。
1.13. 扩展默认单元配置
- 要点:要使用额外的 systemd 配置选项扩展默认的单元文件,您可以在 /etc/systemd/system/ 目录中创建配置目录。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:在 /etc/systemd/system/ 中创建一个配置目录: # mkdir /etc/systemd/system/<name>.service.d/ 将 <name> 替换为您要扩展的服务的名称。语法适用于所有单元类型。
- 列表:创建一个带有 .conf 后缀的配置文件: # touch /etc/systemd/system/name.service.d/<config_name>.conf 将 <config_name> 替换为配置文件的名称。此文件遵循正常的单元文件结构,且您必须在合适的部分中指定所有指令。详情请查看单元文件结构。 例如,要添加自定义依赖项,请使用以下内容创建配置文件: [Unit] Requires=<new_dependency> After=<new_dependency> <new_dependency> 代表要被标记为依赖项的单元。另一个例子是主进程退出后重新启动服务的配置文件,延迟 30 秒: [Service] Rest…
- 列表:将更改应用到单元: # systemctl daemon-reload # systemctl restart <name>.service
- 列表:要在启动 Apache 服务时自动运行自定义 shell 脚本,修改 httpd.service 单元。 创建目录和自定义配置文件: # mkdir /etc/systemd/system/httpd.service.d/ # touch /etc/systemd/system/httpd.service.d/custom_script.conf 通过将以下文本插入到 custom_script.conf 文件中,指定您要在主服务进程后运行的脚本: [Service] ExecStartPost=/usr/local/bin/custom.sh 应用单元更改: # systemctl daemon-reload # systemc…
- 列表:创建目录和自定义配置文件: # mkdir /etc/systemd/system/httpd.service.d/ # touch /etc/systemd/system/httpd.service.d/custom_script.conf
- 命令/配置摘录:
# mkdir /etc/systemd/system/<name>.service.d/
# touch /etc/systemd/system/name.service.d/<config_name>.conf- 注意:注意 /etc/systemd/system/ 配置目录中的文件优先于 /usr/lib/systemd/system/ 中的单元文件。您只需要在配置文件中指定一次选项,如 Description 或 ExecStart。这个选项的值会覆盖默认值。 在 systemd-delta 命令的输出中,单元在监控覆盖单元中描述。这些单元始终标记为 [EXTENDED],即使在某些情况下,某些选项实际上会被覆盖。
1.14. 覆盖默认单元配置
- 要点:要在更新 软件包时永久更改单元文件配置,请覆盖默认的单元配置。
- 要点:当软件包包含默认单元文件配置且软件包被更新时,默认配置会改变。
- 列表:您有管理特权。
- 列表:将单元文件复制到 /etc/systemd/system/ 目录中: # cp /usr/lib/systemd/system/<name>.service /etc/systemd/system/<name>.service 将 <name> 替换为您要覆盖的服务的名称。
- 列表:打开复制的文件并进行更改。
- 列表:应用单元更改: # systemctl daemon-reload
- 列表:重启服务: # systemctl restart <name>.service
- 命令/配置摘录:
# cp /usr/lib/systemd/system/<name>.service /etc/systemd/system/<name>.service
# systemctl daemon-reload1.15. 更改超时限制
- 要点:要防止出现故障的服务释放系统,您可以指定每个服务的超时值。否则,正常服务的 timeout 的默认值为 90 秒,SysV 兼容服务的 timeout 的默认值为 300 秒。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:编辑 httpd 单元文件: # systemctl edit httpd
- 列表:指定 [Service] 部分中的 TimeoutStartSec 值: ... [Service] ... PrivateTmp=true TimeoutStartSec=10 [Install] WantedBy=multi-user.target ...
- 列表:重新载入 systemd 守护进程: # systemctl daemon-reload
- 列表:验证新的超时值: # systemctl show httpd -p TimeoutStartUSec 注意 要全局更改超时限制,在/etc/systemd/system.conf 中输入 DefaultTimeoutStartSec。
- 命令/配置摘录:
# systemctl edit httpd
... [Service] ... PrivateTmp=true TimeoutStartSec=10 [Install] WantedBy=multi-user.target ...- 注意:注意 要全局更改超时限制,在/etc/systemd/system.conf 中输入 DefaultTimeoutStartSec。
1.16. 监控覆盖的单元
- 要点:要监控覆盖或修改的单元文件,您可以使用 systemd-delta 命令。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:显示被覆盖或修改的单元文件的概述: # systemd-delta [EQUIVALENT] /etc/systemd/system/default.target → /usr/lib/systemd/system/default.target [OVERRIDDEN] /etc/systemd/system/autofs.service → /usr/lib/systemd/system/autofs.service --- /usr/lib/systemd/system/autofs.service 2014-10-16 21:30:39.000000000 -0400 +++ /etc/systemd/system/auto…
- 命令/配置摘录:
# systemd-delta
[EQUIVALENT] /etc/systemd/system/default.target → /usr/lib/systemd/system/default.target [OVERRIDDEN] /etc/systemd/system/autofs.service → /usr/lib/systemd/system/autofs.service --- /usr/lib/systemd/system/autofs.service 2014-10-16 21:30:39.000000000 -0400 +++ /etc/systemd/system/autofs.service 2014-11-21 10:00:58.513568275 -0500 @@ -8,7 +8,8 @@ EnvironmentFile=-/etc/sysconfig/autofs ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid ExecReload=/usr/bin/kill -HUP $MAINPID -TimeoutSec=180 +TimeoutSec=240 +Restart=Always [Install] WantedBy=multi-user.target [MASKED] /etc/systemd/system/cups.service → /usr/lib/systemd/system…1.17. 使用实例化单元
- 要点:您可以使用单个 systemd 模板配置来简化多个服务实例的管理。
- 要点:要管理服务的多个实例,您可以使用单个模板配置。您可以为单元定义一个通用模板,并以 @ 表示,并在运行时使用特定参数生成多个单元实例。通过使用 Requires 或 Wants 选项或 systemctl start 命令,您可以开始从另一个单元文件实例化单元。
- 命令/配置摘录:
<template_name>@<instance_name>.service
<unit_name>@.service1.18. 重要单元指定符
- 要点:您可以在任何单元配置文件中使用通配符字符,称为 单元指定符 。单元指定符替换某些单元参数,并在运行时被解释。
- 要点:有关单元指定符的完整列表,请查看您系统上的 systemd.unit (5) 手册页。
- 列表:如何在 RHEL 和 systemd 中为服务设置限制(红帽知识库)
- 列表:如何编写强制必须启动特定服务的服务单元文件(红帽知识库)
- 列表:如何决定 systemd 服务单元定义应具有哪些依赖项(红帽知识库)
- 表格样本(共 6 行):
- 单元指定符 | 含义 | 描述
- %n | 完整单元名称 | 代表完整的单元名称,包括类型后缀。%N 具有相同的含义,但也将禁止的字符替换为 ASCII 代码。
- %p | 前缀名称 | 代表删除了类型后缀的单元名称。对于实例化单元,%p 代表"@"字符前的单元名称的部分。
- %i | 实例名称 | 是"@"字符和类型后缀之间的实例化单元名称的一部分。%I 具有相同的含义,但也将禁止的字符替换为 ASCII 代码。
第 2 章 使用 systemctl管理系统服务
- 要点:要管理系统级别服务,请使用 systemctl 工具。您可以通过启用控制服务和单元来与 systemd 交互。使用 systemctl,您可以管理系统服务的状态,列出可用的服务,并显示系统服务的状态。
2.1. 列出系统服务
- 要点:要优化系统性能,您可以使用 systemctl 命令列出和查看系统服务。系统服务处理后台进程、管理硬件并支持核心系统功能。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:列出所有当前载入的服务单元: $ systemctl list-units --type service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrtd.service loaded active running Automated Bug Reporting Tool ... systemd-vconsole-setup.service loa…
- 列表:列出所有载入的单元,而不考虑它们的状态: $ systemctl list-units --type service --all
- 列表:列出所有可用服务单元的状态,如 启用或禁用 : $ systemctl list-unit-files --type service UNIT FILE STATE abrt-ccpp.service enabled abrt-oops.service enabled abrtd.service enabled ... wpa_supplicant.service disabled ypbind.service disabled 208 unit files listed. 对于每个服务单元,这个命令会显示: UNIT FILE:服务单元的全名。 STATE:服务单元是否已启用或禁用,以便在引导时自动启动的信息。
- 列表:UNIT FILE:服务单元的全名。
- 列表:STATE:服务单元是否已启用或禁用,以便在引导时自动启动的信息。
- 命令/配置摘录:
$ systemctl list-units --type service
UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrtd.service loaded active running Automated Bug Reporting Tool ... systemd-vconsole-setup.service loaded active exited Configure Virtual Console tog-pegasus.service loaded active running OpenPegasus CIM Server LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, or a generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 46 loaded units listed. Pass --all to see loaded but inactive u…2.2. 显示系统服务状态
- 要点:要检查任何服务单元以获取详细信息并验证服务的状态,请使用 systemctl 命令。状态信息包括服务单元是否正在运行、启用在系统引导时启动或屏蔽。
- 要点:您还可以查看计划在特定服务单元之后或之前启动的服务。有关可用服务单元信息,请查看下表。
- 列表:显示与系统服务对应的服务单元的详细信息: $ systemctl status <name>.service 将 <name> 替换为您要检查的服务单元的名称,例如: gdm。 这个命令显示以下信息: 所选服务单元的名称,后跟一个简短描述 如果该单元由 root 用户执行,则服务单元的执行 最新的日志条目 有关服务单元的详细信息
- 列表:所选服务单元的名称,后跟一个简短描述
- 列表:如果该单元由 root 用户执行,则服务单元的执行
- 列表:最新的日志条目
- 列表:有关服务单元的详细信息
- 列表:验证特定的服务单元是否正在运行: $ systemctl is-active <name>.service
- 命令/配置摘录:
$ systemctl status <name>.service
$ systemctl is-active <name>.service- 表格样本(共 7 行):
- 项 | 描述
- Loaded | 是否服务单元已载入的信息、到单元文件的绝对路径,以及是否已启用该单元以便在引导时启动。
- Active | 服务单元是否在运行的信息,后跟时间戳。
- Main PID | 进程 ID 和相应的系统服务的名称。
2.3. 启动和停止 systemd 单元
- 要点:要在当前会话中启动或停止系统服务,您可以使用 systemctl 命令。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:启动或停止系统服务: # systemctl <action> <systemd_unit> 将 <action> 替换为您要执行的操作,如启动或停止。将 <systemd_unit> 替换为服务单元名称,如 httpd。 注意 启动特定的服务可能需要启动一个或多个其他服务(正依赖项)或停止一个或多个服务(负依赖项)。在 systemd 中,不同服务之间存在正和负的依赖项。当您尝试启动新服务时,systemd 会自动解析所有依赖项,而不明确通知用户。 如果您已经运行了服务,且您试图使用负依赖项启动另一个服务,则第一个服务会自动停止。例如,如果您运行 httpd 服务(Apache 网页服务器),然后尝试启动 NGINX 服务, s…
- 命令/配置摘录:
# systemctl <action> <systemd_unit>- 注意:注意 启动特定的服务可能需要启动一个或多个其他服务(正依赖项)或停止一个或多个服务(负依赖项)。在 systemd 中,不同服务之间存在正和负的依赖项。当您尝试启动新服务时,systemd 会自动解析所有依赖项,而不明确通知用户。 如果您已经运行了服务,且您试图使用负依赖项启动另一个服务,则第一个服务会自动停止。例如,如果您运行 httpd 服务(Apache 网页服务器),然后尝试启动 NGINX 服务, systemd 将首先自动停止 httpd。这是因为这两个服务都是不能在同一端口(通常为端口 80 或 443)同时运行的 Web 服务器。
2.4. 重启并重新载入系统服务
- 要点:要在当前会话中重启或重新载入系统服务,请使用 systemctl 命令。您可以在不中断服务的情况下停止和启动服务、重启正在运行的服务或重新载入服务。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:重启一个系统服务: # systemctl restart <name>.service 使用您要重启的服务单元的名称替换 <name>(例如 httpd)。
- 列表:仅在相应的服务已在运行时重启服务单元: # systemctl try-restart <name>.service
- 列表:重新载入配置而不中断服务执行: # systemctl reload <name>.service 某些服务不支持重新加载操作。如果您使用 systemctl reload-or-restart 或 systemctl reload-or-try-restart,如果无法重新加载,systemd 会自动重启该服务。请注意,重启服务可能会中断到此服务的连接。 详情请查看系统中的 systemctl (1) 手册页。
- 命令/配置摘录:
# systemctl restart <name>.service
# systemctl try-restart <name>.service2.5. 启用一个系统服务,以便在引导时启动
- 要点:要启用服务在引导时自动启动,请使用 systemctl 命令。这些更改会在下次重启时应用。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:检查单元是否已屏蔽: # systemctl status <systemd_unit>
- 列表:如果这个单元被屏蔽,请首先取消屏蔽: # systemctl unmask <systemd_unit>
- 列表:使服务在引导时启用: # systemctl enable --now <systemd_unit> 将 < ;systemd_unit > 替换为您要启用的服务单元的名称,例如 httpd。
- 命令/配置摘录:
# systemctl status <systemd_unit>
# systemctl unmask <systemd_unit>2.6. 禁用一个系统服务在引导时启动
- 要点:要减少系统的引导时间,您需要禁用或屏蔽引导时自动启动的服务。
- 要点:禁用服务可防止它在引导时启动,但您仍然可以手动启动。屏蔽服务可防止它自动启动或手动启动,并使其不可用,直到您取消屏蔽该服务。
- 列表:您有管理特权。
- 列表:禁用要在引导时启动的服务: # systemctl disable <name>.service 将 <name> 替换为您要禁用的服务单元的名称(例如:bluetooth)。可选,如果服务当前正在运行,传递 --now 命令也会停止服务。
- 列表:要防止单元被管理员意外启动,或者作为其他单元的依赖项,请屏蔽该服务: # systemctl mask <name>.service 详情请查看系统中的 systemctl (1) 手册页。
- 命令/配置摘录:
# systemctl disable <name>.service
# systemctl mask <name>.service第 3 章 引导至目标系统状态
- 要点:要设置永久引导环境或进入恢复模式,请使用 systemd 目标来完全控制您的系统功能。systemd init 系统是一组 systemd 单元类型,如 systemd.target、multi-user.target、down.target。
3.1. 目标单元文件
- 要点:要在引导过程中通过依赖项链对各种 systemd 单元进行分组,请使用 systemd 中的目标。systemd 中的目标是一组相关的单元,它们在系统引导时充当同步点。
- 要点:目标单元文件以 .target 文件扩展结尾。它代表 systemd 目标。例如,multi-user.target 单元启动其他基本系统服务,如 NetworkManager (NetworkManager.service)或 D-Bus (dbus.service),并激活另一个名为 basic.target 的目标单元。
- 表格样本(共 5 行):
- 目标 | 用途
- rescue.target | 在基本系统中拉取的单元目标,并生成一个救援 shell
- multi-user.target | 用于设置多用户系统的单元目标
- graphical.target | 用于设置图形登录屏幕的单元目标
3.2. 更改用于引导系统的默认目标
- 要点:要更改默认目标,修改当前的 default.target 符号链接以指向新目标单元。当您设置新的默认目标单元时,当前目标将保持不变,直到下次重启为止。
- 要点:在启动过程中,系统会初始化 default.target 指向的默认 systemd 目标。然后 systemd 会解析此链接并引导至定义的目标。所选默认目标单元存在于 /etc/systemd/system/default.target 文件中。每个目标都有一定程度的功能和组其他单元。另外,目标单元在启动过程中作为同步点。systemd 目标类型包括 graphical.target、multi-user 目标等。
- 列表:您有管理特权。
- 列表:显示当前的默认目标单元 systemd 用来启动系统: # systemctl get-default graphical.target
- 列表:列出当前载入的目标: # systemctl list-units --type target
- 列表:将系统配置为默认使用不同的目标单元: # systemctl set-default <name>.target 将 <name> 替换为您要默认使用的目标单元的名称。 # systemctl set-default multi-user.target Removed /etc/systemd/system/default.target Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
- 列表:可选:立即切换到新的默认目标单元: # systemctl isolate default.target
- 列表:验证默认目标单元: # systemctl get-default multi-user.target
- 命令/配置摘录:
# systemctl get-default
graphical.target3.3. 临时更改当前目标
- 要点:要对系统进行故障排除或恢复,您可以在不重启系统的情况下临时更改当前目标。要切换到其他目标,请使用 systemctl isolate 命令。
- 要点:通过选择或更改 systemd 目标,您可以定义和控制在引导过程中开始的选择性服务和单元。您还可以查看当前的默认默认、交换机目标,或根据需要访问紧急 shell 提示符。
- 列表:您有管理特权。
- 列表:显示您可以选择的目标列表: $ systemctl list-units --type target
- 列表:在当前会话中切换到不同的目标单元: # systemctl isolate <name>.target 将 <name> 替换为您要在当前会话中使用的目标单元的名称。 # systemctl isolate multi-user.target 这个命令启动多用户目标单元和所有依赖单元。它还立即停止不是新目标一部分的所有其他单元。由于这是一个临时操作,因此在重新引导主机时,系统将再次引导进入默认目标。您只能隔离单元文件中设置了 AllowIsolate=yes 选项的目标。 详情请查看系统中的 systemctl (1) 手册页。
- 命令/配置摘录:
$ systemctl list-units --type target
# systemctl isolate <name>.target3.4. 引导至救援模式
- 要点:要对系统进行故障排除或修复,您可以引导至救援模式以进入单用户环境。当系统无法访问更新的目标且现有引导过程失败时,会出现这种情况。
- 要点:在救援模式中,系统会挂载本地文件系统并启动所需的服务。它不会激活网络接口。
- 列表:您有管理特权。
- 列表:进入救援模式: # systemctl rescue Broadcast message from root@localhost on pts/0 (Fri 2023-03-24 18:23:15 CEST): The system is going down to rescue mode NOW! 这个命令和 systemctl isolate rescue.target 类似,但它也会向所有当前登录到系统的用户发送一个信息信息。 注意 要防止 systemd 发送信息,请输入: # systemctl --no-wall rescue
- 命令/配置摘录:
# systemctl rescue
Broadcast message from root@localhost on pts/0 (Fri 2023-03-24 18:23:15 CEST): The system is going down to rescue mode NOW!- 注意:注意 要防止 systemd 发送信息,请输入: # systemctl --no-wall rescue
3.5. 引导过程故障排除
- 要点:要在最小环境中输入 以对引导过程进行故障排除,您可以在引导时选择非默认目标。选择要在最多最小环境中进入的紧急模式。在引导时更改目标仅影响单个引导事件。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:重启系统,并通过按任意键中断引导装载程序菜单倒计时,但 Enter 键启动正常引导。
- 列表:选择您要启动的内核条目。
- 列表:按 e 键编辑当前条目。
- 列表:导航到以 linux 开头的行的末尾,然后按 Ctrl+E 跳到这一行的末尾。
- 列表:要选择不同的引导目标,请将 systemd.unit= 参数附加到以 linux 开头的行的末尾: linux ... systemd.unit=<name>.target 将 <name> 替换为您要使用的目标单元的名称。例如:systemd.unit=emergency.target
- 命令/配置摘录:
linux ... systemd.unit=<name>.target第 4 章 关闭、挂起和休眠系统
- 要点:要在系统上管理和管理数据和设置,请使用 systemd 电源管理选项。任务包括管理功耗、执行系统关闭以保护数据以及重启系统以应用更改或更新。
4.1. 安排一个系统 shutdown
- 要点:要执行维护任务并对应用程序应用更新,您可以使用 shutdown 命令来调度延迟关闭。务必要为系统维护任务调度关闭,以避免数据丢失和意外的系统故障。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:关闭系统,并在某个时间关闭机器: # shutdown --poweroff hh:mm 将 hh:mm 替换为 24 小时格式的时间。要防止新的登录,系统会在关闭前创建 /run/nologin 文件 5 分钟。 当您指定 shutdown 命令的时间时,您可以通过指定可选的墙消息来通知登录到系统的用户计划关闭: # shutdown --poweroff 13:59 "Attention. The system will shut down at 13:59"
- 列表:在延迟后关闭和停止系统,而不关闭机器: # shutdown --halt +m 其中 +m 是延迟时间(以分钟为单位)。您可以使用 now 关键字作为 +0 的别名。
- 列表:取消一个待处理的 shutdown: # shutdown -c 详情请查看您系统中的 shutdown (8) 手册页。
- 命令/配置摘录:
# shutdown --poweroff hh:mm
# shutdown --poweroff 13:59 "Attention. The system will shut down at 13:59"4.2. 使用 systemctl 命令来关闭系统
- 要点:您可以使用 systemctl 命令安全地关闭系统,以防止维护过程中的数据崩溃。您可以选择关闭机器,或者在不关闭的情况下停止系统。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:关闭系统并关掉机器电源: # systemctl poweroff 将 - -when 选项与 systemctl poweroff 命令一起使用来指定时间: # systemctl poweroff --when="+15min"
- 列表:将 - -when 选项与 systemctl poweroff 命令一起使用来指定时间: # systemctl poweroff --when="+15min"
- 列表:关闭和停止系统,而不关掉机器电源: # systemctl halt 在 systemctl halt 命令中使用 -- when 选项指定时间: # systemctl halt --when="+15min" 注意 默认情况下,运行这些命令可让 systemd 向当前登录到该系统的所有用户发送一条信息性消息。要防止 systemd 发送这条消息,请使用 --no-wall 命令行选项运行所选命令。
- 列表:在 systemctl halt 命令中使用 -- when 选项指定时间: # systemctl halt --when="+15min" 注意 默认情况下,运行这些命令可让 systemd 向当前登录到该系统的所有用户发送一条信息性消息。要防止 systemd 发送这条消息,请使用 --no-wall 命令行选项运行所选命令。
- 命令/配置摘录:
# systemctl poweroff
# systemctl poweroff --when="+15min"- 注意:注意 默认情况下,运行这些命令可让 systemd 向当前登录到该系统的所有用户发送一条信息性消息。要防止 systemd 发送这条消息,请使用 --no-wall 命令行选项运行所选命令。
4.3. 重启系统
- 要点:要应用待处理的更改和更新,您可以使用 systemctl 命令重启系统。当您重启系统时,systemd 会停止所有运行的程序和服务,系统会关闭,然后立即启动。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:重启系统: # systemctl reboot 注意 默认情况下,运行这个命令会导致 systemd 向当前登录到该系统的所有用户发送一条信息性消息。 要防止 systemd 发送这条消息,请使用 --no-wall 选项运行这个命令。
- 命令/配置摘录:
# systemctl reboot- 注意:注意 默认情况下,运行这个命令会导致 systemd 向当前登录到该系统的所有用户发送一条信息性消息。 要防止 systemd 发送这条消息,请使用 --no-wall 选项运行这个命令。
4.4. 通过挂起和休眠系统来优化功耗
- 要点:要保存当前系统状态并降低功耗,您可以使用 systemctl 命令。使用 systemctl 时,您可以挂起、休眠、混合睡眠或挂起然后休眠系统。
- 要点:要挂起系统,请输入:
- 列表:要挂起系统,请输入: # systemctl suspend 暂停将系统状态保存在 RAM 中,并关闭大多数设备,但 RAM 模块除外。当您重新打开机器时,系统会在不重启的情况下从 RAM 恢复其状态。从挂起模式恢复比休眠模式要快得多,因为此操作会将状态保存在 RAM 中,而不是磁盘上的状态。但是,暂停的系统状态容易受到电源中断的影响。
- 列表:要休眠系统,请输入: # systemctl hibernate 休眠会在硬盘上保存系统状态,并关闭机器。当您重新打开机器时,系统会在不重启的情况下从保存的数据中恢复其状态。从休眠中恢复要比挂起模式恢复要慢得多,因为此操作会在磁盘上保存状态,而不是保存在 RAM 中。但是,计算机不必为 RAM 模块保持电能。
- 列表:要休眠并挂起系统,请输入: # systemctl hybrid-sleep 混合睡眠合并了休眠和挂起。系统将当前状态保存到磁盘并进入低电源状态,从而可以更快地恢复。如果休眠操作期间电源丢失,系统会从保存的磁盘镜像中恢复状态,类似于休眠。
- 列表:要挂起然后休眠系统,请输入: # systemctl suspend-then-hibernate 这个模式首先会挂起系统,以低电源模式将状态保存到 RAM。如果系统在 HibernateDelaySec 中定义的持续时间内仍然暂停,则它会休眠。休眠将状态保存到硬盘中,并完全关闭系统。这个模式会在启用快速恢复时节省电池电源。它还可在电源故障期间保护您的数据。
- 命令/配置摘录:
# systemctl suspend
# systemctl hibernate4.5. 在 GNOME 未运行时更改电源按钮的行为
- 要点:要防止系统在按下电源按钮时关闭,需要修改非图形界面 systemd 目标的设置。根据要求选择选项。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:编辑 /etc/systemd/logind.conf 配置文件,以设置 HandlePowerKey 变量。
- 列表:要在按 power 按钮时重启系统,请设置 重启 值: HandlePowerKey=reboot 使用以下选项之一: poweroff :关闭计算机。 reboot :重启系统。 halt :启动系统停止。 kexec: 启动 kexec 重启。 暂停 :挂起系统。 Hibernate :初始系统休眠. 忽略 :什么都不做。
- 列表:poweroff :关闭计算机。
- 列表:reboot :重启系统。
- 列表:halt :启动系统停止。
- 命令/配置摘录:
HandlePowerKey=reboot
# systemctl reload systemd-logind4.6. 更改 GNOME 中电源按钮的行为
- 要点:要防止系统在按下 power 按钮时挂起,请修改 GNOME 登录屏幕和用户会话的设置。您可以选择其中一个选项:在系统中物理选择,或者从远程控制台虚拟选择。
- 要点:先决条件
- 列表:您有管理特权。
- 列表:在 /etc/dconf/db/local.d/01-power 文件中为系统范围的设置创建一个本地数据库: [org/gnome/settings-daemon/plugins/power] power-button-action=<value> 使用以下电源按钮操作之一替换 <value>: 什么都不做 :什么都不做。 暂停 :挂起系统。 Hibernate: 休眠系统。 交互式 :显示弹出查询,询问用户要做什么。 在交互模式中,当您按 power 按钮时,系统会在 60 秒后自动关闭。您可以从弹出查询中选择不同的行为。
- 列表:什么都不做 :什么都不做。
- 列表:暂停 :挂起系统。
- 列表:Hibernate: 休眠系统。
- 列表:交互式 :显示弹出查询,询问用户要做什么。 在交互模式中,当您按 power 按钮时,系统会在 60 秒后自动关闭。您可以从弹出查询中选择不同的行为。
- 命令/配置摘录:
[org/gnome/settings-daemon/plugins/power] power-button-action=<value>
/org/gnome/settings-daemon/plugins/power/power-button-action第 5 章 优化 systemd 以缩短引导时间
- 要点:您可以通过管理与 systemd 关联的服务来优化系统性能。查看 systemd 在启动过程中启动的服务,并根据您的要求评估它们。禁用引导时启动的某些服务可以缩短引导时间。
5.1. 检查系统引导性能
- 要点:您可以使用 systemd -analyze 命令调整 systemd 服务,以缩短引导时间并检查引导性能。
- 要点:流程
- 列表:列出所有启用的服务以确定 systemd 以调整引导时间: $ systemctl list-unit-files --state=enabled
- 列表:分析最后一次成功引导所需的时间的信息: $ systemd-analyze
- 列表:分析每个 systemd 单元的单元初始化时间: $ systemd-analyze blame 输出会根据在上一次成功引导过程中初始化的时间以降序列出。
- 列表:识别在最后一次成功引导时花费最长初始化时间的关键单元: $ systemd-analyze critical-chain
- 列表:带有红色颜色文本的输出表示引导速度非常严重的单元。 详情请查看系统中的 systemd ( 1)、systemctl (1) 和 systemd-analyze (1) man page。
- 命令/配置摘录:
$ systemctl list-unit-files --state=enabled
$ systemd-analyze5.2. 禁用选择服务的指南
- 要点:要减少系统的引导时间,您需要选择性地只禁用引导时自动启动的非必要的服务。
- 要点:列出启用的服务:
- 列表:列出启用的服务: $ systemctl list-unit-files --state=enabled
- 列表:禁用服务: # systemctl disable <service_name>
- 命令/配置摘录:
$ systemctl list-unit-files --state=enabled
# systemctl disable <service_name>- 表格样本(共 26 行):
- 服务名称 | 详情
- auditd.service | 仅在不需要内核提供审核信息时禁用 auditd.service。请注意,如果禁用 auditd.service,则不会生成 /var/log/audit/audit.log 文件。因此,您无法重新检查一些常见的操作或事件,如用户登录、服务启动或密码更改。另请注意,auditd 有两个部分:内核部分和服务本身。使用 systemctl disable auditd 命令,您只是禁用了该服务,而不是禁用内核的部分。要禁用系统审核,请在内核命令行中设置 audit=0。
- crond.service | 请注意,如果您禁用 crond.service,则不会运行 crontab 中的项目。
- dbus-org.fedoraproject.FirewallD1.service | 到 firewalld.service 的符号链接
完整目录
- 使用 systemd 优化系统性能和扩展配置
- 对红帽文档提供反馈
- 第 1 章 使用 systemd 单元文件
- 1.1. 单元文件简介
- 1.2. systemd 单元文件位置
- 1.3. 单元文件结构
- 1.4. 重要 [Unit] 部分选项
- 1.5. 重要 [Service] 部分选项
- 1.6. 重要 [Install] 部分选项
- 1.7. 创建自定义单元文件
- 1.8. 使用 sshd 服务的第二个实例创建自定义单元文件
- 1.9. 查找 systemd 服务描述和依赖项
- 1.10. 查找服务的默认目标
- 1.11. 查找该服务使用的文件
- 1.12. 修改现有单元文件
- 1.13. 扩展默认单元配置
- 1.14. 覆盖默认单元配置
- 1.15. 更改超时限制
- 1.16. 监控覆盖的单元
- 1.17. 使用实例化单元
- 1.18. 重要单元指定符
- 第 2 章 使用 systemctl管理系统服务
- 2.1. 列出系统服务
- 2.2. 显示系统服务状态
- 2.3. 启动和停止 systemd 单元
- 2.4. 重启并重新载入系统服务
- 2.5. 启用一个系统服务,以便在引导时启动
- 2.6. 禁用一个系统服务在引导时启动
- 第 3 章 引导至目标系统状态
- 3.1. 目标单元文件
- 3.2. 更改用于引导系统的默认目标
- 3.3. 临时更改当前目标
- 3.4. 引导至救援模式
- 3.5. 引导过程故障排除
- 第 4 章 关闭、挂起和休眠系统
- 4.1. 安排一个系统 shutdown
- 4.2. 使用 systemctl 命令来关闭系统
- 4.3. 重启系统
- 4.4. 通过挂起和休眠系统来优化功耗
- 4.5. 在 GNOME 未运行时更改电源按钮的行为
- 4.6. 更改 GNOME 中电源按钮的行为
- 第 5 章 优化 systemd 以缩短引导时间
- 5.1. 检查系统引导性能
- 5.2. 禁用选择服务的指南
