一,什么是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)