System V init 通常称为 SysV init 或 sysvinit,是一种传统的 PID 1 和服务启动设计。它在旧系统及兼容脚本中仍然重要,但存在 SysV 风格文件并不能证明正在运行的 PID 1 就是 sysvinit。
初始化 · 第 1 课
System V 概述
了解传统 System V init 如何使用运行级别和有序服务脚本链接。
识别活动 Init 系统
检查正在运行的 PID 1:
$ ps -p 1 -o pid,comm,args=
$ readlink /proc/1/exe
/etc/inittab 文件或 /etc/init.d/ 目录只能作为辅助证据。Systemd 和其他 init 系统可能为兼容性保留这些文件,容器显示的 PID 命名空间也可能与主机不同。
什么是 sysvinit 正在活动的最有力证据?
运行级别
运行级别是一种以数字命名的运行模式。SysV 配置传统上使用 0 到 6 以及特殊级别,但其含义属于发行版策略,并非通用定律。常见约定包括:
0:关机或断电转换1或S:单用户或救援模式2到5:由发行版定义的多用户模式6:重启转换
Debian 家族系统历史上对级别 2–5 采用相似处理,Red Hat 家族约定则区分文本和图形模式。应检查实际主机的 /etc/inittab、init 文档和运行级别目录。
在许多 SysV 系统上,哪个运行级别传统上请求关机或断电?
Init 脚本与运行级别链接
服务脚本通常位于 /etc/init.d/ 下。/etc/rc2.d/ 或 /etc/rc.d/rc2.d/ 等运行级别目录包含链接,其名称编码转换动作与顺序:
SNNname链接请求启动操作。KNNname链接请求停止操作。NN提供该次转换中链接的字典序顺序。
具体算法和目录会有差异。依赖关系也可以在脚本头中表达,并由发行版工具处理,某些实现还会并行运行工作。不能把 SysV 简化为所有服务一定严格一次只启动一个。
进入运行级别时,S20networking 链接传统上请求什么?
在运行级别之间转换
Init 更改运行级别时,发行版的 rc 机制会停止新模式不再需要的服务,并启动新模式要求的服务。脚本应具有足够的幂等性,能够处理重复的状态或转换操作,并返回有意义的状态。
请求运行级别 0 或 6 是影响整个系统可用性的破坏性操作。应使用系统的关机接口、通知用户、保存活动工作并验证远程控制台访问,而不要随意调用原始 init 转换。
运行级别 6 传统上请求什么?
兼容性的局限
在 systemd 主机上,SysV 脚本可以包装成生成的单元,但 systemd 的依赖、超时、日志和状态语义仍然适用。直接运行旧脚本可能绕过服务管理器的跟踪。应识别活动管理器,并尽可能使用其原生接口。
为什么 systemd 主机上的 SysV 风格脚本通常应该通过服务管理器调用?
课程已完成
你已完成 System V 概述
现在,你可以解读传统 SysV 布局,而不会假定它正在活动。
选择 init 命令前识别正在运行的 PID 1。
把运行级别含义视为发行版定义的约定。
解读运行级别链接中的
S、K与数字顺序。对级别 0 和 6 使用受控关机流程。
存在兼容脚本时,仍应尊重活动管理器。