我对运行级别及其工作原理没有清楚的了解。
我知道运行级别是一个数字,指示应启动哪些进程init
。实际上:在启动时init
看到rcS脚本的这个数字,它决定是否应该启动该脚本?
Busybox
没有运行级别:它启动 rcS 中存在的任何脚本...是吗?实际上,它不检查脚本数字?
最后一个问题:为什么systemd
不使用运行级别?在我的计算机中,我看到一个 rcS 目录,其中包含多个脚本及其关联的数字(运行级别编号)。
答案1
忘记运行级别。
当 AT&T Unix System 3 中引入运行级别时(是的,/etc/inittab
是在 System 3 中引入的,而不是 System 5。)BSD 世界中出现了一些议论,并且 BSD 从未采用该系统。这么多年过去了,System 5 世界的大部分地区现在已经废除了运行级别。
在 IBM AIX 中,随着系统资源控制器的出现,实际使用的运行级别数量在 3.1 版本中减少到 1 个。 IBM 认为人们可能会在 1990 年忘记运行级别。从那时起,运行级别1
和3
to就被“保留”了。9
大约二十年后,systemd 人们在他们的 doco 中宣布运行级别已经“过时”。就像之前的 SRC 一样,也像其他系统一样,例如 Solaris 的 SMF 或 Laurent Bercot 的s6-rc
或 Gerrit Pape 的runit-init
或我的 nosh 系统管理工具集; systemd 不需要它们,或者它们所体现的概念。而是有更好的这些系统中存在各种机制。
(runit
具有在多个扫描目录之间切换的概念。 s6-rc
具有以下概念切换“实时状态”。 noshsystem-control
的概念是目标该服务捆绑包want/
或conflict/
与其他服务捆绑包一起使用。 Solaris SMF 有“里程碑”,例如milestone/multi-user-server
、milestone/self-assembly-complete
和milestone/name-services
。等等。)
BusyBoxinit
有一个inittab
配置文件,但那是不同的到更常见的一种,并且不包含运行级别的概念。
所以:
- 不,
init
确实不是根据运行级别编号在这些目录和脚本中查找内容。只有两个初始化系统曾经做过,甚至在其中一个中,也可以选择rc
使用数据文件而不是/etc/rc.d/
. - 不,即使在 AT&T Unix System 3 系统(及其后继者和克隆版本)上,也不会
init
查看这些脚本。它是rc
。 - 在 systemd 操作系统上,
/etc/init.d/
脚本由向后兼容机制处理,将它们转换为本机服务单元。这很大程度上忽略提供的运行级别信息,在脚本本身和/etc/rc.d/
子目录中,并且只是在其代码中硬连线一些目标。 - 不,运行级别不是数字。
S
是运行级别,而不是数字,如m
、h
和 AIX 的a
、b
、 和c
。 (我不打算在这里详细说明这些是什么,因为这是你可以忘记的事情.)
TrueOS 是逆势而上的一个系统。基于 FreeBSD,它本身仍然使用 Mewburnrc
和 FreeBSD init
,两者都没有运行级别机制,它采用 OpenRC 来替代 Mewburn rc
。具有讽刺意味的是,当宇宙的 System 5 一侧最终将运行级别扔进历史垃圾箱时,它却将 System 5 运行级别添加到了 BSD 中。 ☺
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。
/etc/inittab
已成为过去。。常见答案。 - https://unix.stackexchange.com/a/394238/5132
- https://unix.stackexchange.com/a/463504/5132
- “VR”(2015-09-05)。 现代初始化系统的历史(1992-2015)。黑暗前卫。
- https://unix.stackexchange.com/a/196197/5132
- https://unix.stackexchange.com/a/233581/5132
- 乔纳森·德博因·波拉德 (2015)。System 5 的已知问题
rc
。常见答案。 - https://unix.stackexchange.com/a/471871/5132
- https://news.ycombinator.com/item?id=13453068