文章目录

  • systemd 简介
  • systemd 启动过程概述
  • Systemd的争议

systemd 简介

开发systemd的主要目的就是减少系统引导时间和计算开销。systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。

systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许不同守护进程之间进行交互。systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。systemd处理开机启动进程的方式非常漂亮,和传统基于init的系统比起来优化了太多。让我们看下systemd的一些核心亮点。

  1. systemd支持并发引导过程从而可以更快启动
  2. 通过控制组来追踪进程,而不是PID
  3. 优化了处理引导过程和服务之间依赖的方式
  4. 支持系统快照和恢复
  5. 监控已启动的服务;也支持重启已崩溃服务
  6. 包含了systemd-login模块用于控制用户登录
  7. 支持加载和卸载组件
  8. 低内存使用痕迹以及任务调度能力
  9. 记录事件的Journald模块和记录系统日志的syslogd模块

systemd同时也清晰地处理了系统关机过程。它在/usr/lib/systemd/目录下有三个脚本,分别叫systemd-halt.service,systemd-poweroff.service,systemd-reboot.service。这几个脚本会在用户选择关机,重启或待机时执行。在接收到关机事件时,systemd首先卸载所有文件系统并停止所有内存交换设备,断开存储设备,之后停止所有剩下的进程。

systemd 启动过程概述

让我们看一下Linux系统在使用systemd作为引导程序时的开机启动过程的结构性细节。为了简单,我们将在下面按步骤列出来这个过程:

  1. 当你打开电源后电脑所做的第一件事情就是BIOS初始化。BIOS会读取引导设备设定,定位并传递系统控制权给MBR(假设硬盘是第一引导设备)。

  2. MBR从Grub或LILO引导程序读取相关信息并初始化内核。接下来将由Grub或LILO继续引导系统。如果你在grub配置文件里指定了systemd作为引导管理程序,之后的引导过程将由systemd完成。systemd使用“target”来处理引导和服务管理过程。这些systemd里的“target”文件被用于分组不同的引导单元以及启动同步进程。

  3. systemd执行的第一个目标是default.target。但实际上default.target是指向graphical.target的软链接。Linux里的软链接用起来和Windows下的快捷方式一样。文件Graphical.target的实际位置是/usr/lib/systemd/system/graphical.target。在下面的截图里显示了graphical.target文件的内容。

  1. 在这个阶段,会启动multi-user.target而这个target将自己的子单元放在目录“/etc/systemd/system/multi-user.target.wants”里。这个target为多用户支持设定系统环境。非root用户会在这个阶段的引导过程中启用。防火墙相关的服务也会在这个阶段启动。

"multi-user.target"会将控制权交给另一层“basic.target”。

  1. "basic.target"单元用于启动普通服务特别是图形管理服务。它通过/etc/systemd/system/basic.target.wants目录来决定哪些服务会被启动,basic.target之后将控制权交给sysinit.target.

  1. "sysinit.target"会启动重要的系统服务例如系统挂载,内存交换空间和设备,内核补充选项等等。sysinit.target在启动过程中会传递给local-fs.target。这个target单元的内容如下面截图里所展示。

  1. local-fs.target,这个target单元不会启动用户相关的服务,它只处理底层核心服务。这个target会根据/etc/fstab和/etc/inittab来执行相关操作。
    系统引导性能分析

systemd 提供了工具用于识别和定位引导相关的问题或性能影响。systemd-analyze是一个内建的命令,可以用来检测引导过程。你可以找出在启动过程中出错的单元,然后跟踪并改正引导组件的问题。在下面列出一些常用的systemd-analyze命令。

systemd-analyze time 用于显示内核和普通用户空间启动时所花的时间。

$ systemd-analyze time
Startup finished in 1440ms (kernel) + 3444ms (userspace)

systemd-analyze blame 会列出所有正在运行的单元,按从初始化开始到当前所花的时间排序,通过这种方式你就知道哪些服务在引导过程中要花较长时间来启动。

$ systemd-analyze blame
2001ms mysqld.service
234ms httpd.service
191ms vmms.service

systemd-analyze verify 显示在所有系统单元中是否有语法错误。

systemd-analyze plot 可以用来把整个引导过程写入一个SVG格式文件里。整个引导过程非常长不方便阅读,所以通过这个命令我们可以把输出写入一个文件,之后再查看和分析。下面这个命令就是做这个。

systemd-analyze plot > boot.svg

Systemd的争议

Systemd并没有幸运地获得所有人的青睐,一些专家和管理员对于它的工作方式和开发有不同意见。根据对于Systemd的批评,它不是“类Unix”方式因为它试着替换一些系统服务。一些专家也不喜欢使用二进制配置文件的想法。据说编辑systemd配置非常困难而且没有一个可用的图形工具。

Linux 系统服务管理和控制程序(初始化系统/Init System) -- systemd 介绍相关推荐

  1. Linux 系统服务管理器(初始化系统/init system) -- systemd 及命令 systemctl 的详细介绍

    文章目录 一.系统服务管理器 systemd (一)systemd 的特性 (二)systemd 与 传统 init 系统的区别 (三)systemd 的目录和文件 (四)systemd 的 Unit ...

  2. Linux 及其它类 Unix 系统的系统服务管理和控制程序(初始化系统/init system)简单梳理

    文章目录 一.Linux 的启动过程 二.初始化程序 (一)System V init (二)Upstart init (三)systemd (四)Launchd (五)Epoch (六)Mudar ...

  3. 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd

    文章目录 一.Systemd 的简介和特点 (一)同 SysVinit 和 LSB init scripts 兼容 (二)更快的启动速度 (三)systemd 提供按需启动能力 (四)Systemd ...

  4. Linux 系统服务管理(启动服务/停止服务/重启服务)的命令 - chkconfig/service/systemctl

    文章目录 一.使用命令 chkconfig 管理系统服务 (一)命令介绍 二.使用命令 service 管理系统服务 (一)命令介绍 (二)命令用法 1.启动服务 2.停止服务 3.重启服务 4.查看 ...

  5. Linux系统服务管理

    Linux系统服务管理 ********************************** 目 录 ********************************** Linux系统服务及其分类 ...

  6. linux重启服务挂载盘消失,如何处理ECS Linux服务器重启服务器、初始化系统后数据盘不见了的情况...

    本文在介绍如何处理ECS Linux服务器重启服务器.初始化系统后数据盘不见了的情况的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获. ECS Linux服务器重启服务器.初始化系统 ...

  7. 浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart

    文章目录 一.Upstart 简介 (一)开发 Upstart 的缘由 (二)Upstart 的特点 二.Upstart 概念和术语 (一)Job (二)Job 生命周期 (三)事件 Event 1. ...

  8. 浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- sysvinit/systemvinit(System V init)

    文章目录 从 sysvinit 到 systemd 什么是 init 系统,init 系统的历史和现状 sysvinit 概况 运行级别 sysvinit 运行顺序 sysvinit 和系统关闭 sy ...

  9. Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解

    文章目录 SysV init 简介 SysV init 的缺点 运行级别 主要文件和目录的截图 SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统 ...

最新文章

  1. 如何在 Shell 脚本中执行语法检查调试模式
  2. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
  3. mysql随机显示记录_MySQL随机读取表中记录
  4. 终端界面如何改成彩色的
  5. C常量指针 与指针常量区别
  6. java上机实验报告_javaweb上机实验报告(学生管理系统)
  7. 2021年软件供应链攻击数量激增300%+
  8. 电脑打开任务管理器的方法有哪几种
  9. CSS三角制作(HTML、CSS)
  10. php字符串操作整理,《PHP字符串操作》收集整理
  11. c# 类似Excel的趋势线拟合
  12. 使用opencv进行车牌提取及识别
  13. MTK 6589暗码切换开机LOGO(不适应NAND 的FLASH)
  14. Power Designer 概念数据模型导出 逻辑数据模型和物理数据模型 生成数据库脚本
  15. HTML基本结构标签
  16. LaTeX模板 - FORMCM
  17. 11083 旅游背包
  18. 倍福---PLC 字符串类型string操作
  19. 【优化】seo之提升网站流量的四种方法
  20. Elastic:配置 Elasticsearch 服务器 logs

热门文章

  1. apache ignite_Apache Ignite变得简单:第一个Java应用程序
  2. jakarta ee_Jakarta EE,EE4J和Java EE之间的关系
  3. activiti脚本任务_Activiti中的安全脚本如何工作
  4. 设计模式示例_介体设计模式示例
  5. 使用Oracle验证外部数据
  6. jersey put 服务_项目学生:带有Jersey的Web服务服务器
  7. java 设计模式 示例_Java中的访问者设计模式–示例教程
  8. SMPP Java示例(客户端)
  9. 带有Kafka和ZeroMQ的分布式类星体演员
  10. java泛型面试_Java泛型面试问题