博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RHEL/CentOS 7的systemd target及其中的multi-user.target
阅读量:4179 次
发布时间:2019-05-26

本文共 2526 字,大约阅读时间需要 8 分钟。

在RHEL/CentOS 6中,使用SysV init和Upstart,通过预定义一组Runlevels(从0到6)表示不同的执行模式。

[root@myhost app]# ll /etc/rc.d/total 4drwxr-xr-x. 2 root root 148 May 28 05:40 init.d-rwxr-xr-x. 1 root root 503 May 27 11:29 rc.localdrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc0.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc1.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc2.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc3.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc4.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc5.ddrwxr-xr-x. 2 root root  84 Jan 16 08:07 rc6.d

对于选定的一个Runlevel,执行该Runlevel关联的所有服务,对应/etc/rc.d/init.d/目录下的初始文件,从而定制Linux系统的启动过程。管理员可以通过service命令或chkconfig命令工具进行操作。

事实上,RHEL/CentOS 6中的Runlevels表示的是系统的一组状态。在RHEL/CentOS 7中,Runlevels的概念已经被systemd target替代,而/etc/rc.d/init.d/目录下的初始文件也已经被service units所替代。

systemd target是一种systemd unit,用以描述系统的一个状态或一个同步点(快照)。一个systemd target拥有一个以.target为后缀的unit配置文件,位于/usr/lib/systemd/system/路径下。一个systemd target往往只是一组相关的systemd units的集合,用以将Linux系统设置为某个状态,类似于CentOS 6的Runlevel。CentOS 6的Runlevels与CentOS 7的targets之间的对应关系如下:

Traditional runlevel      New target name     Symbolically linked to targetRunlevel 0           |    runlevel0.target -> poweroff.targetRunlevel 1           |    runlevel1.target -> rescue.targetRunlevel 2           |    runlevel2.target -> multi-user.targetRunlevel 3           |    runlevel3.target -> multi-user.targetRunlevel 4           |    runlevel4.target -> multi-user.targetRunlevel 5           |    runlevel5.target -> graphical.targetRunlevel 6           |    runlevel6.target -> reboot.target

1. multi-user.target

systemd有一个默认target,即multi-user.target,Linux系统启动后即处于该默认target的状态。

Linux系统启动时,各个target之间的依赖关系如下图所示:

查看multi-user.target的unit配置文件,执行命令systemctl cat multi-user.target:

[Unit]Description=Multi-User SystemDocumentation=man:systemd.special(7)Requires=basic.targetConflicts=rescue.service rescue.targetAfter=basic.target rescue.service rescue.targetAllowIsolate=yes

说明:其中Requires给出的basic.target是另一个target,Requires表示multi-user.target依赖于basic.target。

           Conflicts给出的rescure.service rescue.target,表示multi-user.target与他们互斥,不能同时处于multi-user状态和rescue状态。
           After表示multi-user.target在basic.target rescue.service rescue.target之后启动,如果有他们的话。显然,如果启动了 rescue.service rescue.target则表示进入rescue状态,则必然无法启动multi-user.target,从而就不可能进入multi-user状态了。

2. 常见的target相关的systemctl 操作

    查看systemd的默认target:

        systemctl get-default
    查看systemd的所有可用targets:
        systemctl list-unit-files --type=target
    查看systemd的所有启动targets:
        systemctl list-units --type=target
    设置systemd的默认target:
        systemctl set-default graphical.target
 

参考链接:

转载地址:http://dhlai.baihongyu.com/

你可能感兴趣的文章
文科生,你为啥学编程?
查看>>
使用Eclipse时出现Unhandled event loop exception错误的有效解决办法
查看>>
JAVA之路:第一章 JAVA入门初体验
查看>>
菜鸟文科生的java之路:运算符
查看>>
菜鸟文科生的java之路:变量和常量
查看>>
菜鸟文科生的java之路:流程控制语句
查看>>
北海糖:Java初阶练习题
查看>>
不知道什么是数组?看这里就好了
查看>>
文科生北海唐的Java之路:方法(慕课)
查看>>
自学Java的轨迹线路
查看>>
如何更好的隐藏你自己,让我们谈谈什么是封装?
查看>>
文科生北海糖的:Java之路——继承
查看>>
Makefile 中:= ?= += =的区别
查看>>
消灭编译警告(Warning)
查看>>
(GCC) How can I hide "defined but not used" warnings in GCC?
查看>>
错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
查看>>
error: two or more data types in declaration specifiers原因及解决方法
查看>>
Linux驱动基础开发2
查看>>
ioctl在socket中的一些用法及示例
查看>>
Linux设备驱动--块设备(二)之相关结构体
查看>>