目标(target)
运行级别(runlevel)是一个旧的概念。现在,systemd 引入了一个和运行级别功能相似又不同的概念——目标(target)。不像数字表示的启动级别,每个目标都有名字和独特的功能,并且能同时启用多个。一些目标继承其他目标的服务,并启动新服务。systemd 提供了一些模仿 sysvinit 运行级别的目标,仍可以使用旧的 telinit 运行级别
命令切换。
获取当前目标
不要使用 runlevel
命令了:
- $ systemctl list-units --type=target
创建自定义目标
在 sysvinit 中有明确定义的运行级别(如:0、1、3、5、6)与 systemd 中特定的 目标 存在一一对应的关系。然而,对于用户自定义运行级别(2、4)却没有。如需要同样功能,建议你以原有运行级别所对应的 systemd 目标为基础,新建一个/etc/systemd/system/<目标名>.target
(可参考/usr/lib/systemd/system/graphical.target
), 然后创建目录/etc/systemd/system/<目标名>.wants
,并向其中加入需启用的服务链接(指向/ur/lib/systemd/system/
)。
"SysV 运行级别" 与 "systemd 目标" 对照表
SysV 运行级别 | Systemd 目标 | 注释 |
---|---|---|
0 | runlevel0.target, poweroff.target | 中断系统(halt) |
1, s, single | runlevel1.target, rescue.target | 单用户模式 |
2, 4 | runlevel2.target, runlevel4.target, multi-user.target | 用户自定义运行级别,通常识别为级别3。 |
3 | runlevel3.target, multi-user.target | 多用户,无图形界面。用户可以通过终端或网络登录。 |
5 | runlevel5.target, graphical.target | 多用户,图形界面。继承级别3的服务,并启动图形界面服务。 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 急救模式(Emergency shell) |
切换当前运行目标
systemd中,运行目标通过“目标单元”访问。通过如下命令切换:
- # systemctl isolate graphical.target
该命令仅更改当前运行目标,对下次启动无影响。这等价于sysvinit中的 telinit 3
或 telinit 5
命令。
更改开机默认启动目标
开机启动的目标是 default.target
,默认链接到 graphical.target
(大致相当于原来的运行级别5)。
用 systemctl 检查当前的默认启动目标:
- # systemctl get-default
用 systemctl 修改default.target
以变更开机默认启动目标:
- $ systemctl set-default multi-user.target
- Removed /etc/systemd/system/default.target.
- Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target.
另一方法是向bootloader添加内核参数):
systemd.unit=multi-user.target
(大致相当于运行级别3)systemd.unit=rescue.target
(大致相当于运行级别1)
默认目标顺序
Systemd 根据下面顺序选择 default.target
:
- 上面的内核参数
/etc/systemd/system/default.target
软链接/usr/lib/systemd/system/default.target
软链接