target
- 启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。
- Systemd 的解决方案就是 Target。简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启动。
查看Target命令
查看当前系统的所有 Target
$ systemctl list-unit-files --type=target
查看一个 Target 包含的所有 Unit
$ systemctl list-dependencies multi-user.target
查看启动时的默认 Target
$ systemctl get-default
设置启动时的默认 Target
$ sudo systemctl set-default multi-user.target
切换 Target 时,默认不关闭前一个 Target 启动的进程,
$ sudo systemctl isolate 命令改变这种行为,
关闭前一个 Target 里面所有不属于后一个 Target 的进程
$ sudo systemctl isolate multi-user.target
Target 与 传统 RunLevel 的对应关系
启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。Systemd 的解决方案就是 Target。
简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于”状态点”,启动某个 Target 就好比启动到某种状态。
传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启
| Traditional runleve | New target name Symbolically linked to… |
|---|---|
| Runlevel 0 | runlevel0.target -> poweroff.target 关闭系统。 |
| Runlevel 1 | runlevel1.target -> rescue.target 单用户模式。 |
| Runlevel 2 | runlevel2.target -> multi-user.target 用户定义/域特定运行级别。默认等同于 3。 |
| Runlevel 4 | runlevel4.target -> multi-user.target |
| Runlevel 3 | runlevel3.target -> multi-user.target 多用户,非图形化。用户可以通过多个控制台或网络登录。 |
| Runlevel 5 | runlevel5.target -> graphical.target 多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。 |
| Runlevel 6 | runlevel6.target -> reboot.target 重启 |
| emergency | emergency.target 紧急 Shell |
它与init进程的主要差别如下:
- 默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
- 启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。
- 配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。