1. 由来
  • Linux 的启动一直采用init进程,这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程,二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长,Systemd 这个名字的含义,就是它要守护整个系统。Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单元,服务)
  • 支持并行化任务
  • 同时采用socket式与D-Bus总线式激活服务;
  • 按需启动守护进程(daemon);
  • 利用 Linux 的 cgroups 监视进程;
  • 支持快照和系统恢复;
  • 维护挂载点和自动挂载点;
  • 各服务间基于依赖关系进行精密控制
  • 所有可用的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目录(后者优先级更高
  1. systemd用法
  • systemctl是 Systemd 的主命令,用于管理系统,查看 Systemd 的版本

systemd设计原理 systemd详解_运维

  • 用于查看启动耗时   
  • systemd设计原理 systemd详解_服务器_02

  • 查看每个服务的启动耗时
  • systemd设计原理 systemd详解_运维_03

  •  
  • 显示瀑布状的启动过程流
  • systemd设计原理 systemd详解_配置文件_04

  • 显示指定服务的启动流
  • systemd设计原理 systemd详解_服务器_05

  1. Unit 的配置文件
  • 每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。systemctl enable命令用于在上面两个目录之间,建立符号链接关系,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。真正的文件时箭头后面
  • systemd设计原理 systemd详解_linux_06

  • 配置文件的区块unit
    [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
    [Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动
    [Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块
  • systemd设计原理 systemd详解_linux_07

  1. target
  • Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit
    (1)默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target,通常符号链接到graphical.target(图形界面)或者multi-user.target(多用户命令行)。
    (2)启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。
    (3)配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置。
  1. 日志管理
  • Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf
  1. 如何制作系统启动服务
  2. systemd设计原理 systemd详解_linux_08

  3.  
  4. 文件详解
[Unit]
  Description:描述信息
        After:表明需要依赖的服务,作用决定启动顺序
        Before:表明被依赖的服务
        Requles:依赖到的其他unit ,强依赖,即依赖的unit启动失败。该unit不启动。
        Wants:依赖到的其他unit,弱依赖,即依赖的unit 启动失败。该unit继续启动
        Conflicts:定义冲突关系
 [Service]:
Type:启动时关系的定义,
        simple:exec启动的进程就是主进程。
        forking :exec 启动的进程生成的其中一个子进程成为主进程,启动完成后,旧的主进程会退出。
        ontshot:启动下一个进程前主进程退出。
PIDFile=/var/run/sshd.pid
      EnvironmentFile 需要使用到的变量的定义文件
      ExecStart= 启动 unit需要执行的命令
      ExecStartpre:
      ExecStartpost:
      ExecStop=停止unit需要执行的命令
      Restart:
   ExecReload=/bin/kill -HUP $MAINPID
      KillMode=process
      Restart=on-failure
      RestartSec=42s
[install]:服务启动或禁用时的一些选项
Alias:
      RequlredBy: 被那些unit所依赖,
      WantedBy:被那些unit所依赖