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的更多相关文章

  1. centos7的systemd命令对比

    centos7的systemd命令对比 http://www.linuxidc.com/Linux/2014-09/106490p2.htmhttp://www.linuxidc.com/Linux/ ...

  2. centos7上systemd详解

    centos7上systemd详解  发表于 2016-06-07 |  分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往 ...

  3. centos7的systemd

    系统启动流程 POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --& ...

  4. CentOs7下systemd管理知识要点

    centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...

  5. Centos7之Systemd(Service文件)详解

    一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...

  6. RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken

    RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...

  7. RAID磁盘阵列及CentOS7系统启动流程

    磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,,数据读取无影响.将数据切割成许多区段,分别存放在各个硬盘 ...

  8. 20190411RAID磁盘阵列及CentOS7系统启动流程

    RAID磁盘阵列及CentOS7系统启动流程(week2_day3)   RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构 ...

  9. centos7系统启动流程

    前提:pc主机,MBR架构 第一步:post(power on system test)加电自检. pc机的主板上有个rom芯片(CMOS),加电后,cpu去找这个raw,然后读取里面的指令,检测机器 ...

随机推荐

  1. jquey写进度条问题

    jquey写进度条问题可以直接按照 总时间和进度条宽度之比来做 不管他是不是y=kx 反正时间到0 进度肯定是0了

  2. egret inspect插件安装失败处理方法

    egret inspect插件安装失败处理方法谷歌浏览器版本太高不兼容了 换个69就行了 然后点击加载已解压的扩展程序选择EgretInspector-v2.5.5这个文件夹 就安装成功了 重启下浏览 ...

  3. SVN--服务端安装和设置---centos7

    一.安装环境 [root@localhost ~]# getenforce Disabled [root@localhost ~]# systemctl disable firewalld 二.yum ...

  4. 【转载】常见十大经典排序算法及C语言实现【附动图图解】

    原文链接:https://www.cnblogs.com/onepixel/p/7674659.html 注意: 原文中的算法实现都是基于JS,本文全部修改为C实现,并且统一排序接口,另外增加了一些描 ...

  5. @Transactional 的回滚

    默认情况下,Exception是不会引起回滚操作的,RuntimeException才会引起回滚操作. 当然如果所有的Exception都要回滚的话,直接@Transactional(rollback ...

  6. .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

    .NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员登录 ...

  7. ASP.NET Core 1.0: 指定Static File中的文件作为default page

    指定一个网站的default page是很容易的事情.譬如IIS Management中,可以通过default page来指定,而默认的index.html, index.htm之类,则早已经被设置 ...

  8. Kibana创建索引成功,但一直不显示出来(Fielddata is disabled on text fields by default. Set fielddata=true........)

    现象 把EFK整个集群搭建完成后,通过Kibana操作界面创建索引(如图1),我创建了lile-zabbix*的索引,显示是创建成功了,但是只要我在重新刷新一次,已经创建的索引就“消失了”.后通过查看 ...

  9. add jar and proxy repo

    1. 添加代理仓库 2. 添加host 仓库 3. 添加私有jar 4. 添加仓库到public 仓库

  10. 阿里云ECS搭建kubernetes1.11

    环境信息 说明 1.使用kubeadm安装集群 虚拟机信息 hostname memory cpu disk role node1.com 4G 2C vda20G vdb20G master nod ...