学会爱上 systemd


学会爱上 systemd

文章插图
 
systemd 是所有进程之母,负责将 linux 主机启动到可以做生产性任务的状态 。
  • 来源:https://linux.cn/article-12214-1.html
  • 作者:David Both
  • 译者:messon007
【学会爱上 systemd】 
systemd(是的,全小写,即使在句子开头也是小写),是初始化程序(init)和 SystemV 初始化脚本的现代替代者 。此外,它还有更多功能 。
当我想到 init 和 SystemV 初始化时,像大多数系统管理员一样,我想到的是 Linux 的启动和关闭,而不是真正意义上的管理服务,例如在服务启动和运行后对其进行管理 。像 init 一样,systemd 是所有进程之母,它负责使 Linux 主机启动到可以做生产性任务的状态 。systemd 设定的一些功能比老的初始化程序要广泛得多,它要管理正在运行的 Linux 主机的许多方面,包括挂载文件系统、管理硬件、处理定时器以及启动和管理生产性主机所需的系统服务 。
本系列文章是基于我的三期 Linux 培训课程《 使用和管理 Linux:从零开始进行学习系统管理 》部分内容的摘录,探讨了 systemd 在启动和启动完成后的功能 。
Linux 引导Linux 主机从关机状态到运行状态的完整启动过程很复杂,但它是开放的并且是可知的 。在详细介绍之前,我将简要介绍一下从主机硬件被上电到系统准备好用户登录的过程 。大多数时候,“引导过程”被作为一个整体来讨论,但这是不准确的 。实际上,完整的引导和启动过程包含三个主要部分:
  • 硬件引导:初始化系统硬件
  • Linux 引导(boot):加载 Linux 内核和 systemd
  • Linux 启动(startup):systemd 为主机的生产性工作做准备
Linux 启动阶段始于内核加载了 init 或 systemd(取决于具体发行版使用的是旧的方式还是还是新的方式)之后 。init 和 systemd 程序启动并管理所有其它进程,它们在各自的系统上都被称为“所有进程之母” 。
将硬件引导与 Linux 引导及 Linux 启动区分开,并明确定义它们之间的分界点是很重要的 。理解它们的差异以及它们每一个在使 Linux 系统进入生产状态所起的作用,才能够管理这些进程,并更好地确定大部分人所谓的“启动”问题出在哪里 。
启动过程按照三步引导流程,使 Linux 计算机进入可进行生产工作的状态 。当内核将主机的控制权转移到 systemd 时,启动环节开始 。
systemd 之争systemd 引起了系统管理员和其它负责维护 Linux 系统正常运行人员的广泛争议 。在许多 Linux 系统中,systemd 接管了大量任务,这在某些开发者和sysadmins群体中引起了反对和不和谐 。
SystemV 和 systemd 是执行 Linux 启动环节的两种不同的方法 。SystemV 启动脚本和 init 程序是老的方法,而使用 目标(target)的 systemd 是新方法 。尽管大多数现代 Linux 发行版都使用较新的 systemd 进行启动、关机和进程管理,但仍有一些发行版未采用 。原因之一是某些发行版维护者和系统管理员喜欢老的 SystemV 方法,而不是新的 systemd 。
我认为两者都有其优势 。
为何我更喜欢 SystemV
我更喜欢 SystemV,因为它更开放 。使用 Bash 脚本来完成启动 。内核启动 init 程序(这是一个编译后的二进制)后,init 启动 rc.sysinit 脚本,该脚本执行许多系统初始化任务 。rc.sysinit 执行完后,init 启动 /etc/rc.d/rc 脚本,该脚本依次启动 /etc/rc.d/rcX.d 中由 SystemV 启动脚本定义的各种服务 。其中 X 是待启动的运行级别号 。
除了 init 程序本身之外,所有这些程序都是开放且易于理解的脚本 。可以通读这些脚本并确切了解整个启动过程中发生的事情,但是我不认为有太多系统管理员真正做到这一点 。每个启动脚本都被编了号,以便按特定顺序启动预期的服务 。服务是串行启动的,一次只能启动一个服务 。
systemd 是由 Red Hat 的 Lennart Poettering 和 Kay Sievers 开发的,它是一个由大型的、编译的二进制可执行文件构成的复杂系统,不访问其源码就无法理解 。它是开源的,因此“访问其源代码”并不难,只是不太方便 。systemd 似乎表现出对 Linux 哲学多个原则的重大驳斥 。作为二进制文件,systemd 无法被直接打开供系统管理员查看或进行简单更改 。systemd 试图做所有事情,例如管理正在运行的服务,同时提供明显比 SystemV 更多的状态信息 。它还管理硬件、进程、进程组、文件系统挂载等 。systemd 几乎涉足于现代 Linux 主机的每个方面,使它成为系统管理的一站式工具 。所有这些都明显违反了“程序应该小,且每个程序都应该只做一件事并做好”的原则 。


推荐阅读