2.2.2. 新的 Init 系统
Systemd 是系统和服务管理程序,它替换在以前的 Red Hat Enterprise Linux 版本中使用的 SysV init。
systemd 是在引导过程中启动的第一个进程,在关闭时终止的最后一个过程。它协调引导过程的剩余部分并为用户配置系统。在 systemd 下,相互依赖的程序可以并行加载,从而加快了引导过程的速度。
在用户体验和脚本 API 方面,Systemd 与 SysV 基本兼容。然而,有一些例外情况存在。详情请查看 第 2.2.2.1 节 “后向兼容性”。
移动到 systemd 还涉及更改 Red Hat Enterprise Linux 的管理工具。详情请查看 systemctl man page 或 System Administrator 的指南。
有关引导过程的详情,请查看 安装指南。有关 systemd 的详情,请查看 系统管理员指南。
2.2.2.1. 后向兼容性
在用户体验和脚本 API 方面,Systemd 与 SysV 基本兼容。然而,在有些情况下兼容性会有一些限制。
-
标准
/etc/init.d/servicename
命令(启动
、停止
、状态
)仍然可以工作。但是,红帽建议/usr/sbin/service servicename
命令,因为它们直接转发到systemd
,而不是使用旧的初始化脚本。 -
运行级别支持有限。所有 SysV 运行级别都映射到 systemd 目标(target),但不是所有的 systemd 目标都映射到 SysV 运行级别。因此,对当前运行级别进行的一些检查将返回
N
(未知运行级别)。红帽建议避免运行级别检查,而是推荐使用 systemd 目标。 -
旧的运行级别 2、3 和 4 都默认映射到
multi-user.target
systemd 目标。用户可以通过配置不同的 systemd 目标来修改此行为。 - 服务会以“干净”的形式执行,且不会继承调用用户的任何上下文。依赖于继承上下文的初始化脚本将无法正常工作。
-
systemd 不支持 init 脚本中的附加操作动词。如果您需要
启动
、停止
或status
以外的操作动词,请将其移动到辅助脚本。 - 现在 systemd 在运行时会完全解析并使用 Linux Standard Base 标头信息。
- 现在,所有初始化脚本操作都会有 5 分钟的超时时间,以防止因为 init 脚步出现挂起情况而导致系统停机。
- systemd 只停止正在运行的服务 ; 没有启动的服务也不会在关闭过程中停止。
-
chkconfig 工具只显示 SysV 服务和运行级别信息,并可能会输出误导信息。红帽建议使用
systemctl
命令替代它。 -
在启用
CPUAccounting
选项时,SysV 服务(即使具有 root 权限的服务)也无法获得实时调度。为任何服务启用CPUAccounting
后,systemd 会在全局范围内使用 CGroup CPU 带宽控制器,后续的sched_setscheduler()
系统调用会因为实时调度优先级意外终止。要避免出现这个错误,可以使用 service 为实时 CPU.rt_runtime_us 选项设置 CGroupcpu.rt_runtime_us
选项。 服务无法从标准输入(stdin)读取。如果您需要交互式脚本,请考虑 systemd 支持的最小密码查询框架。有关这个功能的更多信息,请参阅 man page:
$ man systemd-ask-password
-
以前的 Red Hat Enterprise Linux 版本包括一个特定于 System z 的预安装脚本(
linuxrc.s390
),它在引导时启动 System z 系统。新的 init 系统已过时了这个安装脚本,System z 系统现在以与 AMD64、Intel 64 和 Power 系统相同的方式引导。