一,什么是systemd的target?
1,关于systemd/systemctl的相关知识,请移步到这一篇
https://www.cnblogs.com/architectforest/p/12678142.html
2,Target 就是一个 Unit 组,包含许多相关的 Unit
启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit
可以理解成init的runlevel
3,systemd类似运行级别的target有哪些?
poweroff.target (相当于runlevel 0) 关闭电源 rescue.target (相当于runlevel 1) 急救 multi-user.target (相当于runlevel 3) 多用户命令行 graphical.target(相当于runlevel 5) 图形界面 reboot.target(相当于runlevel 6) 重启
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,target相关的目录
1,默认的 RunLevel,位置是 /etc/systemd/system/default.target
它是一个符号链接,链接会链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)
2,当设置一个unit为开机自启动时,可以看到:
是为它创建符号链接到当前的target的对应目录下:
例如: /etc/systemd/system/multi-user.target.wants
例子:
[root@blog ~]# systemctl enable mysqld.service
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
例子:查看multi-user.target下自动启动的服务:
[root@blog ~]# ll /etc/systemd/system/multi-user.target.wants
默认的 RunLevel(在 /etc/inittab 文件设置)现在被默认的 Target 取代,
位置是 /etc/systemd/system/default.target,
通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)
例子:
[root@blog ~]# ll /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 37 Dec 25 11:33 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
三,查看默认的运行级别
[root@blog ~]$ systemctl get-default
multi-user.target
在另外一台图形界面的centos上查看
[root@centos8 ~]$ systemctl get-default
graphical.target
四,不重启机器而切换当前的运行级别
#isolate 用于切换当前的运行级别
#切换到multi-user.target(命令行界面)
[root@centos8 ~]$ systemctl isolate multi-user.target
#切换到graphical.target(图形界面)
[root@centos8 ~]$ systemctl isolate graphical.target
五,查看当前的运行级别:
1,切换到命令行界面
[root@centos8 liuhongdi]# systemctl isolate multi-user.target
2,用runlevel查看当前的运行级别:
[root@centos8 liuhongdi]# runlevel 5 3
说明:5是前一个运行级别
3是当前的运行级别
3,也可以用who -r命令
[root@centos8 liuhongdi]# who -r run-level 3 2020-04-07 16:44 last=5
run-level 是当前的运行级别
last是上一个运行级别
六,修改默认的运行级别target
1,修改默认的运行级别:
#set-default 用来指定默认的运行级别
[root@centos8 ~]# 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.
说明:我们可以看到:set-default 所做的操作:
把/usr/lib/systemd/system/multi-user.target创建符号链接到/etc/systemd/system/default.target
2,查看修改是否成功:
[root@centos8 ~]# systemctl get-default
multi-user.target
3,修改成功后重启可以看到效果
七,查看一个运行级别下面所有的unit
1,
# list-dependencies: 分析指定target各unit之间的依赖关系,如果不指明target,则表示是默认的target
[root@blog ~]# systemctl list-dependencies multi-user.target multi-user.target ● ├─aegis.service ● ├─aliyun.service ● ├─atd.service ● ├─auditd.service ● ├─chronyd.service ● ├─crond.service ● ├─dbus.service ● ├─dnf-makecache.timer ● ├─ecs_mq.service ● ├─irqbalance.service ● ├─libstoragemgmt.service ● ├─mcelog.service ● ├─mdmonitor.service
说明: 各个service前的黑色圆点,如果是绿色,表示正在运行中,active
如果是黑色,表示是inactive
2,查看哪些target引用了当前运行级别的target
#--reverse
[root@blog ~]# systemctl list-dependencies multi-user.target --reverse multi-user.target ● └─graphical.target
multi-user.target被graphical.target所引用
八,systemctl与关机/重启相关的命令
1,关闭cpu,但未关闭电源
[root@blog ~]# systemctl halt
2,关闭电源
[root@blog ~]# systemctl poweroff
建议使用这个,这个会真正关闭电源
3,重启机器
[root@blog ~]# systemctl reboot
九,列出系统中包含的所有target
[root@blog ~]# systemctl list-unit-files --type=target
十,查看centos的版本
[root@blog ~]$ cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core)