Menu Close

12.3. 兼容性更改

systemd 系统和服务管理器的主要设计思想是与 SysV init 和 Upstart 兼容。以下是与使用 SysV init 的 Red Hat Enterprise Linux 6 系统相关的最显著兼容性更改:

  • systemd 只对运行级别(runlevel)提供有限支持。它还提供了很多目标单元,可以直接映射到这些运行级别,并且出于兼容性的原因,它也随早期的 运行级别 命令发布。但是,并非所有 systemd 目标都可直接映射到运行级别,因此此命令可能会返回 N 以指示未知运行级别。建议您尽可能避免使用 runlevel 命令。
    有关 systemd 目标及其与运行级别比较的更多信息,请参阅使用 systemd 目标
  • systemctl 程序不支持自定义命令。除了 start, stopstatus 等标准命令外,SysV init 脚本的作者还可以对任意数量的任意命令实施支持,以提供附加功能。例如,iptables 的 init 脚本可以使用 panic 命令来执行,该命令可立即启用 panic 模式并重新配置系统以开始丢弃所有传入和传出数据包。systemd 不支持它,systemctl 只接受记录的命令。
  • systemctl 实用程序与没有由 systemd 启动的服务通信。当 systemd 启动系统服务时,它会保存其主进程的 ID 以跟踪它。然后,systemctl 程序使用这个 PID 来查询和管理该服务。因此,如果用户直接在命令行启动某个特定的守护进程, systemctl 就无法决定其当前状态或停止它。
  • systemd 只会停止运行的服务。之前,当启动关闭序列时,Red Hat Enterprise Linux 6 以及之前的发行本都使用位于 /etc/rc0.d/ 目录中的符号链接停止所有可用的系统服务,而不考虑它们的状态。使用 systemd 时,只有运行的服务才会在关闭时停止。
  • 系统服务无法从标准输入流读取。当 systemd 启动一个服务时,它会将其标准输入连接到 /dev/null,以防止与用户的任何交互。
  • 系统服务不会从调用用户及其会话继承任何上下文(如 HOMEPATH 环境变量)。每个服务都在干净的执行上下文中运行。
  • 加载 SysV init 脚本时,systemd 会读取在 Linux Standard Base(LSB)标头中编码的依赖关系信息,并在运行时对其进行解释。
  • 服务单元中的所有操作都会被默认超时时间 5 分钟,以防止出现故障的服务释放系统。这个值在从 initscripts 生成的且无法更改的服务中是被硬编码的。但是,可以使用单个配置文件为每个服务指定一个较长的超时值,请参阅更改超时限制