[TimLinux] systemd 精通CentOS7系统启动systemd
1. 介绍
systemd: 在12种不同类型的实体单元(entity unit)间提供了一个依赖关系系统。
2. 几个概念
实体单元:为系统的启动和维护封装多种对象(object)。
主体单元在单元配置文件中配置(语法和基本选项集在man 5 systemd.unit中查看),也有通过从其他配置文件中自动创建单元配置,根据系统运行时的状态动态创建单元配置。单元的配置:1. 来自配置文件,2. 来自其他配置文件,自动创建当前单元的配置,3. 系统运行时得出的动态配置。
实体单元状态:active(started, bound, plugged, ...),inactive(stopped,unbound, unplugged, ...), failed(启动失败)。一旦进入一个状态,将被记录。实体单元也有许多附加的子状态。
3. 实体单元
12种实体单元类型:
. 服务单元(service units):启动和控制 daemons 等进程,更多信息 man systemd.service
. 套接字单元(socket units):封装本地在系统内等 IPC 或网络 socket,基于网络点激活,man systemd.socket, man daemon
. 目标单元(target units):用于对单元分组,或启动阶段更好同步点,man systemd.target
. 设备单元(device units):基于设备点激活,内核使用的设备,man systemd.device
. 挂载单元(mount units):控制在文件系统内的挂载点,man systemd.mount
. 自动挂载单元(automount units):提供自动挂载能力,并行启动阶段文件系统挂载,man systemd.automount
. 快照单元(snapshot units):可用来临时对实体单元集合对状态进行临时保存,之后可以从保存快照单元中恢复,man systemd.snapshot
. 定时器单元(timer units):基于定时器来触发其他单元对激活,man systemd.timer
. 交换单元(swap units):与挂载单元类型,封装了文件系统内存交换分区相关对象,man systemd.swap
. 路径单元(path units):用来当文件系统的对象改变或被修改时,激活其他服务,man systemd.path
. 切片单元(slice units):用于资源管理的目的来对单元进行分组,管理系统进程(如:服务单元、范围单元)在层次化树中,man systemd.slice
. 范围单元(scope units):与服务单元类似,但是用来管理外部进程,而不是启动他们,man systemd.scope
4. 依赖
systemd 包含许多种类的依赖:
. 正向,反向需求(requirement)依赖(Requires= 和 Conflicts= )
. 顺序依赖(After= 和 Before=)
当在两个单元之间只存在需求依赖,而没有顺序依赖,两单元将并行启动。通常的模式是需求依赖和顺序依赖在两个单元内都进行配置,多数的依赖关系是由systemd隐式创建和维护的,配置文件内不需要手动进行配置。 应用程序可能在单元状态发生变化时,因配置的依赖关系而被请求启动。在systemd内,这样的请求被封装在'jobs'内,并维护在一个Job queue里面。Jobs可能成功或失败,他们的执行是顺序的,顺序依赖关系来自单元被调用时的顺序。 在启动阶段的systemd激活 target单元 default.target,它的工作是用来激活启动阶段的服务单元、和其他根据依赖关系拉起来的启动单元。通常单元名只是graphical.targe或者multi-user.target的一个符号链接别名。然而切换到其他目标也是一项需要慎重对待的管理任务。man systemd.special查看关于这些目标单元更多的细节。 systemd进程存放在一个独立的Linux控制组(control groups),单元属于systemd层次的私有结构中。systemd使用这样的结构来有效跟踪进程。控制组信息在内核中维护,并且通过文件系统结构(/sys/fs/cgroup/systemd)或者工具来访问(ps xawf -eo pid,user,cgroup,args)。
5. 启动过程
systemd 解析顺序:
. /usr/lib/systemd/system/default.target ->graphical.target cat /usr/lib/systemd/system/default.target
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special()
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes 发现Requires,然后解析 multi-user.target . /usr/lib/systemd/system/multi-user.target cat /usr/lib/systemd/system/multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special()
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes 包含的单元集合:
/etc/systemd/system/multi-user.target.wants/
/usr/lib/systemd/system/multi-user.target.wants/ 发现 Requires,然后解析 basic.target . /usr/lib/systemd/system/basic.target cat /usr/lib/systemd/system/basic.target
[Unit]
Description=Basic System
Documentation=man:systemd.special() Requires=sysinit.target
After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sockets.target paths.target slices.target 包含的单元集合:
/etc/systemd/system/basic.target.wants/
/usr/lib/systemd/system/basic.target.wants/ basic.target是一个特殊单元,不能被重命名(systemd认这个名称,并执行了一些内置默认的启动操作) 发现 Requires,然后解析 sysinit.target . /usr/lib/systemd/system/sysinit.target cat /usr/lib/systemd/system/sysinit.target
[Unit]
Description=System Initialization
Documentation=man:systemd.special()
Conflicts=emergency.service emergency.target
Wants=local-fs.target swap.target
After=local-fs.target swap.target emergency.service emergency.target 包含的单元集合:
/etc/systemd/system/sysinit.target.wants/
/usr/lib/systemd/system/sysinit.target.wants/ 发现 After,然后解析 local-fs.target . /usr/lib/systemd/system/local-fs.target cat /usr/lib/systemd/system/local-fs.target
[Unit]
Description=Local File Systems
Documentation=man:systemd.special()
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs-pre.target
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly 包含的单元集合:
/usr/lib/systemd/system/local-fs.target.wants/ 发现 After,然后解析 local-fs-pre.target,pre.target是一个特殊target,内置了启动项。
6. 其他
要查看具体的启动顺序可以通过如下命令输入到文件,然后通过浏览器打开查看。
systemd-analyze plot > boot-sequence.html
列出所有正在运行的单元,按从初始化开始到启动所花的时间排序。
systemd-analyze blame
[TimLinux] systemd 精通CentOS7系统启动systemd的更多相关文章
- centos7的systemd命令对比
centos7的systemd命令对比 http://www.linuxidc.com/Linux/2014-09/106490p2.htmhttp://www.linuxidc.com/Linux/ ...
- centos7上systemd详解
centos7上systemd详解 发表于 2016-06-07 | 分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往 ...
- centos7的systemd
系统启动流程 POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --& ...
- CentOs7下systemd管理知识要点
centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...
- Centos7之Systemd(Service文件)详解
一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...
- RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken
RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...
- RAID磁盘阵列及CentOS7系统启动流程
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,,数据读取无影响.将数据切割成许多区段,分别存放在各个硬盘 ...
- 20190411RAID磁盘阵列及CentOS7系统启动流程
RAID磁盘阵列及CentOS7系统启动流程(week2_day3) RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...
- centos7系统启动流程
前提:pc主机,MBR架构 第一步:post(power on system test)加电自检. pc机的主板上有个rom芯片(CMOS),加电后,cpu去找这个raw,然后读取里面的指令,检测机器 ...
随机推荐
- webpack的npm扩展使用
一.NPM的扩展使用 (1) npm init:初始化一个Node.js项目------创建必须的package.json文件 npm init -y:创建必须的package.json文件 (2) ...
- 201871010114-李岩松《面向对象程序设计(java)》第六、七周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 怎样在PaaS平台上搭建一个会自动关闭的会议室
首相得解释一下,什么叫做会自动关闭的会议室.我们的会议室是存在一个会议预定系统的,一般情况下,我们需要开会的时候,需要先抢占会议室.等待要开会的时候,去会议室里边开会,如果里边有别人,我们可以告诉他们 ...
- PHP Laravel 队列技巧:Fail、Retry 或者 Delay
当创建队列jobs.监听器或订阅服务器以推送到队列中时,您可能会开始认为,一旦分派,队列工作器决定如何处理您的逻辑就完全由您自己决定了. 嗯……并不是说你不能从作业内部与队列工作器交互,但是通常情况下 ...
- 创建和销毁对象——用私有构造器或者枚举类型强化Singleton属性
参考资料:<Effective Java>.<Java核心技术 卷1>.https://www.cnblogs.com/zhaosq/p/10135362.html 基础回顾 ...
- nyoj 214-单调递增子序列(二) (演算法,PS:普通的动态规划要超时)
214-单调递增子序列(二) 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:11 submit:35 题目描述: 给定一整型数列{a1,a2..., ...
- Zabbix-(六) JMX监控
Zabbix-(六) JMX监控 一.前言 Zabbix提供了JMX监控,它通过JMX API获取JVM信息,从而提供监控数据.本文讲述使用JMX监控Tomcat的JVM信息. 准备 Zabbix S ...
- 【SpringBoot | Redis】SpringBoot整合Redis
SpringBoot整合Redis 1. pom.xml中引入Redis相关包 请注意,这里我们排除了lettuce驱动,采用了jedis驱动 <!-- redis的依赖 --> < ...
- 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- (六)OpenStack---M版---双节点搭建---Neutron安装和配置
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建网络服务数据库 2.获得 admin 凭证来获取只有管理员能执行的命令的访问权限 3.创 ...