文章目录
写在前面
本文主要介绍了linux的系统和服务管理器,与 SysV 和 LSB 初始化脚本兼容。主要内容有systemd的概念,适用的发行版,提供的能力,一些特点,发展史,起源,和旧的SystemV的比较,以及一些其他的相关问题。内容主要来自于systemd官网,网络文章,chatgpt3.5的回答。用于学习记录。
其他文章可参考:
systemd专栏
systemd是什么?
Systemd
是 Linux 的系统和服务管理器,与 SysV 和 LSB
初始化脚本兼容。
Systemd
是一个在大多数现代 Linux 发行版中用于启动系统和管理系统进程的系统和服务管理器。它取代了传统的 System V init 系统,提供了更先进、更功能丰富的系统初始化和服务管理功能。与 SysV 和 LSB 初始化脚本兼容。
也就是说systemd是一个系统管理器;服务管理器。
管理系统初始化等;管理服务。
Systemd 提供:
- 强大的并行化能力
- 使用套接字和 D-Bus 激活来启动服务
- 提供守护进程的按需启动,使用
Linux cgroups
跟踪进程 - 支持快照和恢复系统状态
- 维护挂载点和自动挂载点
- 实现基于事务依赖关系的复杂服务控制逻辑。
官方网站介绍:
system
d 是 Linux 系统的一套基本构建块。它提供了一个以 PID 1
运行并启动系统其余部分的系统和服务管理器。 systemd
提供积极的并行化功能,使用套接字和 D-Bus
激活来启动服务,提供守护进程的按需启动,使用 Linux 控制组跟踪进程,维护挂载点和自动挂载点,并实现基于事务依赖的精心设计的服务控制逻辑。systemd
支持 SysV 和 LSB 初始化脚本
,并作为 sysvinit
的替代品。 其他部分包括日志守护进程、用于控制基本系统配置(如主机名、日期、区域设置)的实用程序、维护登录用户列表以及正在运行的容器和虚拟机、系统帐户、运行时目录和设置,以及用于管理简单网络的守护进程配置、网络时间同步、日志转发和名称解析。
目前使用systemd的Linux发行版有哪些?
使用 Systemd 作为默认初始化系统的知名 Linux 发行版:
1. Ubuntu
:从 Ubuntu 15.04
开始,Canonical 公司的 Ubuntu 发行版开始使用 Systemd 作为默认的初始化系统。
2. Debian
:Debian 8(Jessie)
及其后续版本也采用了 Systemd 作为默认的初始化系统。
3. Fedora
:自 Fedora 15
开始,Red Hat
公司的 Fedora 发行版一直在使用 Systemd。
4. CentOS
:CentOS 7
和CentOS 8
也使用 Systemd 作为默认的初始化系统。
5. openSUSE
:openSUSE
以及它的衍生版如Leap 和 Tumbleweed
也使用 Systemd。
6. Arch Linux
:Arch Linux
也使用 Systemd 作为默认的初始化系统。
7. Red Hat Enterprise Linux (RHEL)
:RHEL 7 和 RHEL 8 也采用了 Systemd 作为默认的初始化系统。
8. Kali Linux
:Kali Linux
也使用 Systemd 作为默认的初始化系统。
请注意,Linux 发行版的发展是不断变化的,因此在查找最新信息时,建议查看各个发行版的官方网站或社区以获取最准确的信息。
linux开机流程(系统初始化)是什么,systemd在其中的作用是什么
Linux 的开机流程通常可以概括为以下几个阶段,并介绍 Systemd 在其中的作用:
- BIOS/UEFI阶段:
计算机开机时首先执行基本输入输出系统(BIOS)
或统一可扩展固件接口(UEFI)
中的启动程序,进行硬件自检和初始化。 - Boot Loader阶段:
Boot Loader(如GRUB、LILO等)
被加载,负责加载内核和初始化 RAM 磁盘。 - 内核初始化阶段:
Linux 内核被加载并初始化,包括初始化设备驱动程序、文件系统等。 - Systemd 初始化阶段:
Systemd 作为初始化系统的一部分,负责启动和管理系统中的各种服务和进程。它的主要作用包括:
- 单元管理 :Systemd 使用
单元(Units)
描述系统资源和服务,负责启动、停止和管理这些单元。 - 服务管理 :Systemd 管理系统中的各种服务,包括网络服务、日志服务等。
- 依赖关系 :Systemd 确保服务按照定义的依赖关系正确启动和停止。
- 日志管理 :Systemd 负责收集和管理系统日志。
- 定时任务 :Systemd 可以管理系统中的定时任务。
- 系统状态监控 :Systemd 提供了监控系统状态和性能的功能。
- 用户空间初始化阶段:
Systemd 启动后,会继续启动其他用户空间的进程和服务,如网络管理、图形界面等。
在 Linux 的开机流程中,Systemd 扮演着关键的角色,负责系统的初始化和服务管理,提供了更快速、可靠和灵活的系统启动和管理功能。通过 Systemd,管理员可以方便地管理系统中的各种服务、定时任务和系统资源,提高系统的可维护性和性能。
系统启动之后,Systemd也负责管理系统中的各种服务、定时任务和系统资源。
systemd架构图
图 1:systemd 的架构,作者:Shmuel Csaba Otto Traian (CC BY-SA 3.0)
systemd的一些特点
Systemd 的一些主要特点和功能:
- 单元管理:Systemd 引入了单元(Unit)的概念,将系统中的各种资源和服务抽象为单元,统一管理和控制。这包括服务单元、套接字单元、设备单元、挂载点单元等,使得管理和配置更为灵活和简单。
- 服务管理:Systemd 可以并行启动系统服务,提高系统的启动速度。它支持自动启动、停止、重启服务,以及监控服务状态、输出日志等功能,简化了服务管理的流程。
- 依赖关系:Systemd 允许定义服务之间的依赖关系,确保服务按照正确的顺序启动,并在需要时自动解决依赖关系,提高系统的稳定性和可靠性。
- 日志管理:Systemd 集成了日志记录功能,可以方便地查看和管理系统和服务的日志信息,帮助用户更好地诊断和解决问题。
- 定时任务:Systemd 支持定时任务的管理,用户可以轻松地设置和管理定时执行的任务,提高系统的自动化和效率。
- 系统状态监控:Systemd 提供了一系列命令和工具,可以监控系统的状态、资源使用情况和服务运行情况,帮助用户及时发现和解决问题。
systemd的发展史,起源,以及为什么有这个?
Systemd 是一个用于 Linux 系统的系统和服务管理器,最初由德国的开发者 Lennart Poettering 和 Kay Sievers 开发。以下是 Systemd 的发展史、起源和存在的原因:
起源:
Systemd 的起源可以追溯到 2010 年左右,当时 Linux 社区开始对传统的 SysVinit 初始化系统提出了一些批评,认为其在系统初始化和服务管理方面存在一些不足。Lennart Poettering 等人开始着手开发一个新的初始化系统,旨在改善 Linux 系统的启动速度、可靠性和管理性。
存在原因:
- 改善系统初始化速度:传统的 SysVinit 启动过程较为复杂,需要按顺序启动每个服务,导致系统启动时间较长。Systemd 通过并行启动服务和采用更现代的方法,显著提高了系统的启动速度。
- 统一管理服务:Systemd 引入了单元(Unit)的概念,将系统中的各种资源和服务抽象为单元,统一管理和控制,简化了服务的启动、停止和管理。
- 改善系统可维护性:Systemd 提供了更多的功能和工具,如日志管理、依赖关系管理、定时任务等,使系统更易于维护和管理。
- 提高系统稳定性和安全性:Systemd 的设计旨在提高系统的稳定性和安全性,通过更好的进程管理和资源控制,降低系统崩溃的风险。
发展历程:
- Systemd 最初引起了一些争议,一些人认为它过于庞大、独占资源等问题。然而,随着时间的推移,越来越多的 Linux 发行版开始采用 Systemd 作为默认的初始化系统,包括 Ubuntu、Debian、Fedora、CentOS 等,逐渐成为 Linux 系统的标准初始化系统。
- Systemd 的持续发展和改进,不断增加新功能和改进性能,使得它成为现代 Linux 系统中不可或缺的一部分。
总的来说,Systemd 的存在是为了改善 Linux 系统的初始化和服务管理,提高系统的性能、可靠性和可维护性,使得 Linux 在面对现代计算环境的挑战时能够更加强大和灵活。
systemd在现在有什么问题吗?
在软件开发和使用过程中,特别是像 Systemd 这样复杂且广泛使用的软件项目中,通常会出现一些问题和争议。以下是一些人们可能认为 Systemd 存在的一些问题:
- 过于庞大 :一些批评者认为 Systemd 过于庞大,引入了大量功能和依赖项,使得整个系统变得复杂 。这可能导致一些用户认为 Systemd 过度集成了太多功能,而不是遵循 UNIX 哲学中的“每个程序只做好一件事”的原则。
- 学习曲线陡峭 :Systemd 引入了许多新概念和工具,对于习惯于传统 SysVinit 的用户来说,可能需要一定时间来适应和学习新的工作流程和命令。
- 争议和分歧 :Systemd 在推出以来一直存在争议,一些用户和发行版开发者对其设计和决策持有不同意见。这种争议可能导致一些分裂和不满情绪。
- 系统兼容性 :由于 Systemd 成为许多主流 Linux 发行版的默认初始化系统,一些用户可能因为特定需求或偏好而遇到与 Systemd 不兼容的情况,这可能导致一些问题和困扰。
- 性能和资源消耗 :一些人担心 Systemd 的复杂性可能导致性能下降或资源消耗增加,尤其是在资源有限的系统上。
尽管存在一些批评和争议,但 Systemd 作为 Linux 系统的主要初始化系统和服务管理器,仍然被广泛使用并持续发展。Systemd 的设计旨在提高系统的性能、可维护性和安全性,因此许多用户和发行版开发者仍然看好它的未来,并致力于改进和优化 Systemd,以满足不断变化的需求和挑战。
systemd的补丁是跟随linux发行版的补丁一起发布的吗?
关于 Systemd 的补丁发布方式,一般来说,Systemd 的补丁通常会随着主要 Linux 发行版的更新一起发布。Systemd 作为许多主流 Linux 发行版的默认初始化系统和服务管理器,其更新通常会与 Linux 内核和发行版的其他组件同步发布。
如果想获取特定 Linux 发行版中 Systemd 的补丁信息,可以查看该发行版的官方网站或开发者社区,通常会提供有关 Systemd 更新和补丁的详细信息。此外,也可以通过 Systemd 项目的邮件列表、GitHub 存储库或社区论坛等渠道获取有关 Systemd 的最新补丁和更新信息。
systemd targets与旧的 SystemV 启动运行级别比较
首先,systemd 挂载 /etc/fstab
定义的文件系统,包括任何交换文件或分区。
此时,它可以访问位于 /etc
中的配置文件,包括它自己的配置文件。它使用其配置链接 /etc/systemd/system/default.target
来确定主机应引导到哪个状态或目标。default.target
文件是指向真正目标文件的符号链接。对于桌面工作站,这通常是 graphical.target
,它相当于 SystemV
中的运行级别 5
。对于服务器,默认值更可能是 multi-user.target
,类似于 SystemV
中的运行级别 3
。emergency.target
类似于单用户模式
。目标和服务是 systemd 单元。
每个目标都有一组依赖关系,这些依赖关系在其配置文件中进行了描述。systemd 启动所需的依赖项,这些依赖项是在特定功能级别 运行 Linux 主机所需的服务。当目标配置文件中列出的所有依赖项都加载并运行时,系统将在该目标级别运行。
sysinit.target 和 basic.target
可以被视为启动过程中的检查点 。尽管 systemd 的设计目标之一是并行启动系统服务 ,但必须先启动某些服务和功能目标 ,然后才能启动其他服务和目标。在满足该检查点所需的所有服务和目标之前,无法通过这些检查点。
当它所依赖的所有单元都完成时,就会达到 sysinit.target。
所有这些单元,挂载文件系统,设置交换文件,启动udev,设置随机生成器种子,启动低级服务,以及设置加密服务(如果一个或多个文件系统被加密),都必须完成,但是,在sysinit.target中,这些任务可以并行执行。
sysinit.target
启动系统所需的所有低级服务和单元,这些服务和单元是启用迁移到 basic.target
所需的。
在满足sysinit.target
后,systemd 将启动满足下一个目标所需的所有单元。 basic.target
通过启动所有下一个目标所需的单位来提供一些附加功能。其中包括设置各种可执行目录的路径、通信套接字和计时器等内容。
最后,可以初始化用户级目标 multi-user.target
或 graphical.target
。必须先访问 multi-user.target
,然后才能满足图形目标依赖关系.
如果 multi-user.target
是默认值,则应该会在控制台上看到文本模式登录。如果 graphical.target
是默认值,那么应该会看到一个图形登录;看到的特定 GUI 登录屏幕取决于的默认显示管理器。
总的来说,systemd 既强大又复杂。同样明显的是,systemd 不是一个单一的、巨大的、单体的、不可知的二进制文件。相反,它由许多较小的组件和子命令组成,这些组件和子命令旨在执行特定任务
SysVinit 命令的 systemd 命令等效项
如果省略服务名称,则所有最新版本都采用后缀 。例如systemctl start frobozz.service
和systemctl start frobozz
等效。
以fedro系统为例
sysvinit 命令 | systemd 命令 | 描述 |
---|---|---|
service frobozz start | systemctl start frobozz | 用于启动服务(不是持久重启) |
service frobozz stop | systemctl stop frobozz | 用于停止服务(不是持久性重启) |
service frobozz restart | systemctl restart frobozz | 用于停止然后启动服务 |
service frobozz reload | systemctl reload frobozz | 如果支持,则在不中断挂起操作的情况下重新加载配置文件。 |
service frobozz condrestart | systemctl condrestart frobozz | 如果服务已在运行,请重新启动。 |
service frobozz status | systemctl status frobozz | 指示服务当前是否正在运行。 |
ls /etc/rc.d/init.d/ | systemctl或systemctl list-unit-files --type=service; ls /lib/systemd/system/.service; ls /etc/systemd/system/.service | 用于列出可以启动或停止的服务 用于列出所有服务和其他单元 |
chkconfig frobozz on | systemctl enable frobozz | 打开服务,以便在下次启动时启动或其他触发器。 |
chkconfig frobozz off | systemctl disable frobozz | 在下次重新启动或任何其他触发器时关闭服务。 |
chkconfig frobozz | systemctl is-enabled frobozz | 用于检查服务是否配置为在当前环境中启动。 |
chkconfig --list | systemctl list-unit-files --type=service或ls /etc/systemd/system/*.wants/ | 打印一个服务表,其中列出了每个运行级别配置的打开或关闭 |
chkconfig --list |grep 5:on | systemctl list-dependencies graphical.target | 打印引导至图形模式时将启动的服务表 |
chkconfig frobozz --list | ls /etc/systemd/system/*.wants/frobozz.service | 用于列出此服务配置的启用或关闭级别 |
chkconfig frobozz --add | systemctl daemon-reload | 在创建新的服务文件或修改任何配置时使用 |
表中列出的所有命令和命令将继续在基于 systemd 的系统上工作,并在必要时转换为本机等效项。唯一的例外是 ./sbin/service/sbin/chkconfigchkconfig --list
相关信息
运行以获取更多详细信息。man systemctl
参考:
Systemd 项目的官方网站是 systemd.io
https://systemd.io/
https://www.freedesktop.org/software/systemd/man/latest/
源码路径:https://github.com/systemd/systemd/tree/main
博客:
https://zhuanlan.zhihu.com/p/643259265
https://opensource.com/article/20/4/systemd
https://docs.fedoraproject.org/en-US/quick-docs/systemd-understanding-and-administering