文章插图
图 1:systemd 的架构,作者 Shmuel Csaba Otto Traian (CC BY-SA 3.0)
如果要完整地讲解 systemd 就需要一本书 。你不需要了解图 1 中的 systemd 组件是如何组合在一起的细节 。只需了解支持各种 Linux 服务管理以及日志文件和日志处理的程序和组件就够了 。但是很明显,systemd 并不是某些批评者所宣称的那样,它是一个单一的怪物 。
作为 1 号进程的 systemdsystemd 是 1 号进程(PID 1) 。它的一些功能,比老的 SystemV3 init 要广泛得多,用于管理正在运行的 Linux 主机的许多方面,包括挂载文件系统以及启动和管理 Linux 生产主机所需的系统服务 。与启动环节无关的任何 systemd 任务都不在本文讨论范围之内(但本系列后面的一些文章将探讨其中的一些任务) 。
首先,systemd 挂载 /etc/fstab 所定义的文件系统,包括所有交换文件或分区 。此时,它可以访问位于 /etc 中的配置文件,包括它自己的配置文件 。它使用其配置链接 /etc/systemd/system/default.target 来确定将主机引导至哪个状态或目标 。default.target 文件是指向真实目标文件的符号链接 。对于桌面工作站,通常是 graphical.target,它相当于 SystemV 中的运行级别 5 。对于服务器,默认值更可能是 multi-user.target,相当于 SystemV 中的运行级别 3 。emergency.target 类似于单用户模式 。目标(target)和 服务(service)是 systemd 的 单元(unit) 。
下表(图 2)将 systemd 目标与老的 SystemV 启动运行级别进行了比较 。systemd 提供 systemd 目标别名以便向后兼容 。目标别名允许脚本(以及许多系统管理员)使用 SystemV 命令(如 init 3)更改运行级别 。当然,SystemV 命令被转发给 systemd 进行解释和执行 。
文章插图
图 2:SystemV 运行级别与 systemd 目标和一些目标别名的比较
每个目标在其配置文件中都描述了一个依赖集 。systemd 启动必须的依赖项,这些依赖项是运行 Linux 主机到特定功能级别所需的服务 。当目标配置文件中列出的所有依赖项被加载并运行后,系统就在该目标级别运行了 。在图 2 中,功能最多的目标位于表的顶部,从顶向下,功能逐步递减 。
systemd 还会检查老的 SystemV init 目录,以确认是否存在任何启动文件 。如果有,systemd 会将它们作为配置文件以启动它们描述的服务 。网络服务是一个很好的例子,在 Fedora 中它仍然使用 SystemV 启动文件 。
图 3(如下)是直接从启动手册页复制来的 。它显示了 systemd 启动期间一般的事件环节以及确保成功启动的基本顺序要求 。
cryptsetup-pre.target | (various low-level v API VFS mounts: (various cryptsetup devices...) mqueue, configfs, | | debugfs, ...) v | | cryptsetup.target | | (various swap | | remote-fs-pre.target | devices...) | | | | | | | | | v | v local-fs-pre.target | | | (network file systems) | swap.target | | v v | | | v | remote-cryptsetup.target | | | (various low-level (various mounts and | | | | | services: udevd, fsck services...) | | remote-fs.target | | tmpfiles, random | | | / | | seed, sysctl, ...) v | | / | | | local-fs.target | | / | | | | | | / ____|______|_______________ ______|___________/ | / / | / v | / sysinit.target | / | | / ______________________/|_____________________ | / / | | | | / | | | | | | / v v | v | | / (various (various | (various | |/ timers...) paths...) | sockets...) | | | | | | | | v v | v | | timers.target paths.target | sockets.target | | | | | | v | v _______ | _____/ rescue.service | |/ | | v v | basic.target rescue.target | | | ________v____________________ | / | | | | | | v v v | display- (various system (various system | manager.service services services) | | required for | | | graphical UIs) v v | | multi-user.target emergency.service | | | | _____________ | _____________/ v |/ emergency.target v graphical.target
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1分钟!学会用Excel自动记录时间,告别手动低效
- 为什么会爱上一个不爱我的人-喜欢上一个不爱你的人-_1
- 爱上茶是种瘾,是瘾组图
- 爱上纯料普洱,8种普洱古树纯料茶
- 爱上红茶的碧螺春,碧螺春的品质等级
- cad怎么画箭头?CAD妙招-CAD绘制箭头的3种方法,你学会了吗
- 爱上政和白茶,政和大白荼产地
- 七个步骤学会使用百度carlife,车机互联很方便
- 动态路由协议RIP配置,带你一分钟学会
- 如何保护肺部,学会五个养肺的方法