Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

10.3. 使用 systemd 目标

之前版本的 Red Hat Enterprise Linux(使用 SysV init 或 Upstart 发布)实施了一组代表特定操作模式的预定义运行级别。这些运行级别从 0 到 6,由系统管理员启用特定运行级别时要运行的系统服务选择定义。在 Red Hat Enterprise Linux 7 中,运行级别的概念已被 systemd 目标替代

systemd 目标由目标单元表示。目标单元以 .target 文件扩展名结尾,它们的唯一用途是通过依赖项链将其他 systemd 单元分组在一起。例如,用于启动图形会话的 graphical.target 单元将启动系统服务,如 GNOME 显示管理器(gdm.service)或帐户服务(accounts-daemon.service),还激活 multi-user.target 单元。同样,multi -user.target 单元会启动其他基本系统服务,如 NetworkManager(NetworkManager.service)或 D-Bus(dbus.service),并激活另一个名为 basic.target 的目标单元。

Red Hat Enterprise Linux 7 发布有多个预定义目标,它们与之前系统版本中的标准运行级别集类似。出于兼容性的原因,它还为这些目标提供了别名,可将其直接映射到 SysV 运行级别。表 10.6 “SysV 运行级别与 systemd 目标比较” 提供 SysV 运行级别的完整列表及其相应的 systemd 目标。

表 10.6. SysV 运行级别与 systemd 目标比较

运行级别目标单元描述

0

runlevel0.target, poweroff.target

关闭系统。

1

runlevel1.target, rescue.target

设置救援 shell。

2

runlevel2.target, multi-user.target

设置一个非图形化的多用户系统。

3

runlevel3.target, multi-user.target

设置一个非图形化的多用户系统。

4

runlevel4.target, multi-user.target

设置一个非图形化的多用户系统。

5

runlevel5.target, graphical.target

设置图形化多用户系统。

6

runlevel6.target, reboot.target

关闭并重启系统。

要查看、更改或配置 systemd 目标,请使用 systemctl 工具,如 表 10.7 “SysV init 命令与 systemctl 的比较” 和以下部分所述。运行级别telinit 命令仍可在系统中使用,并可按预期工作,但只出于兼容性原因被包括在内,因此应该尽量避免使用。

表 10.7. SysV init 命令与 systemctl 的比较

旧命令新命令描述

runlevel

systemctl list-units --type target

列出当前载入的目标单元。

telinit runlevel

systemctl isolate name.target

更改当前目标。

10.3.1. 查看默认目标

要确定默认使用哪个目标单元,运行以下命令:

systemctl get-default

这个命令解析位于 /etc/systemd/system/default.target 的符号链接并显示结果。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”

例 10.10. 查看默认目标

要显示默认目标单元,键入:

~]$ systemctl get-default
graphical.target

10.3.2. 查看当前目标

要列出所有当前载入的目标单元,在 shell 提示下键入以下命令:

systemctl list-units --type target

对于每个目标单元,这个命令会显示其全名(UNIT),后跟一个备注,该单元是否已加载(LOAD)、其高级(ACTIVE)和低级(SUB)单元激活状态,以及简短描述(DESCRIPTION)。

默认情况下,systemctl list-units 命令只显示活跃的单位。如果您想列出所有载入的单元,无论它们的状态如何,请使用 --all-a 选项。

systemctl list-units --type target --all

有关如何显示默认目标的详情,请查看 第 10.3.1 节 “查看默认目标”。有关如何更改当前目标的详情请参考 第 10.3.4 节 “更改当前目标”

例 10.11. 查看当前目标

要列出所有当前载入的目标单元,请运行以下命令:

~]$ systemctl list-units --type target
UNIT         LOAD  ACTIVE SUB  DESCRIPTION
basic.target     loaded active active Basic System
cryptsetup.target   loaded active active Encrypted Volumes
getty.target     loaded active active Login Prompts
graphical.target   loaded active active Graphical Interface
local-fs-pre.target  loaded active active Local File Systems (Pre)
local-fs.target    loaded active active Local File Systems
multi-user.target   loaded active active Multi-User System
network.target    loaded active active Network
paths.target     loaded active active Paths
remote-fs.target   loaded active active Remote File Systems
sockets.target    loaded active active Sockets
sound.target     loaded active active Sound Card
spice-vdagentd.target loaded active active Agent daemon for Spice guests
swap.target      loaded active active Swap
sysinit.target    loaded active active System Initialization
time-sync.target   loaded active active System Time Synchronized
timers.target     loaded active active Timers

LOAD  = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB  = The low-level unit activation state, values depend on unit type.

17 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

10.3.3. 更改默认目标

要将系统配置为默认使用不同的目标单元,以 root 用户身份在 shell 提示符后输入以下内容:

systemctl set-default name.target

name 替换为您要默认使用的目标单元的名称(例如: multi-user)。这个命令将 /etc/systemd/system/default.target 文件替换为指向 /usr/lib/systemd/system/name.target 符号链接,其中 name 是您要使用的目标单元的名称。有关如何更改当前目标的详情请参考 第 10.3.4 节 “更改当前目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”

例 10.12. 更改默认目标

要将系统配置为默认使用 multi-user.target 单元,以 root 用户身份运行以下命令:

~]# systemctl set-default multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'

10.3.4. 更改当前目标

要切换到当前会话中的不同目标单元,以 root 用户身份在 shell 提示符后输入以下内容:

systemctl isolate name.target

使用您要使用的目标单元的名称替换 name(例如: multi-user)。这个命令启动名为 name 的目标单元 以及所有依赖的单元,并立即停止所有其它单元。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”

例 10.13. 更改当前目标

要关闭图形用户界面并改为当前会话中的 multi-user.target 单元,以 root 用户身份运行以下命令:

~]# systemctl isolate multi-user.target

10.3.5. 进入救援模式

救援模式提供了一个方便的单用户环境,它可让您在无法完成常规引导过程时修复您的系统。在救援模式中,系统会尝试挂载所有本地文件系统并启动一些重要的系统服务,但不激活网络接口或者同时允许更多的用户登录到该系统。在 Red Hat Enterprise Linux 7 中,救援模式等同于单用户模式,需要 root 密码。

要改变当前目标并在当前会话中进入救援模式,以 root 用户身份在 shell 提示符后输入以下内容:

systemctl rescue

这个命令和 systemctl isolate rescue.target 类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall 命令行选项运行这个命令:

systemctl --no-wall rescue

有关如何进入紧急模式的详情请参考 第 10.3.6 节 “进入紧急模式”

例 10.14. 进入救援模式

要在当前会话中进入救援模式,以 root 以用户身份运行以下命令:

~]# systemctl rescue

Broadcast message from root@localhost on pts/0 (Fri 2013-10-25 18:23:15 CEST):

The system is going down to rescue mode NOW!

10.3.6. 进入紧急模式

紧急模式 提供最小的环境,并可在系统无法进入救援模式的情况下修复您的系统。在紧急模式中,系统仅挂载用于读取的 root 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动几个必要的服务。在 Red Hat Enterprise Linux 7 中,紧急模式需要 root 密码。

要改变当前目标并进入紧急模式,以 root 用户身份在 shell 提示符后输入以下内容:

systemctl emergency

这个命令和 systemctl isolate emergency.target 类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall 命令行选项运行这个命令:

systemctl --no-wall emergency

有关如何进入救援模式的详情请参考 第 10.3.5 节 “进入救援模式”

例 10.15. 进入紧急模式

要进入紧急模式而不向目前登录到该系统的所有用户发送信息,以 root 用户身份运行以下命令:

~]# systemctl --no-wall emergency