Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 选项设置 CGroup cpu.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 系统相同的方式引导。