使用 SystemD 更改 CentOS 7 中的运行级别

使用 SystemD 更改 CentOS 7 中的运行级别

在 CentOS 7 中,我只想在运行级别 3 和 5 中启动 httpd 服务,在其他运行级别(例如 2 和 4)中,该服务不应启动。

在 CentOS 6 中,我们可以通过使用“chkconfig”命令来实现这一点。在 CentOS 7 环境中寻找类似的解决方案。

答案1

我看到您提到您希望在运行级别 3 和 5 中启动 HTTPD,并在运行级别 2 和 4 中停止 HTTPD。这是 Red Hat 手册的 URL,提供了 Init 和 SystemD 的详细概述。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Targets.html

Red Hat 手册指出 multi-user.target 与运行级别 2、3 和 4 相同。

  • 运行级别 0 = poweroff.target
  • 运行级别 1=rescue.target
  • 运行级别 2 = 多用户.目标
  • 运行级别 3 = 多用户.目标
  • 运行级别 4 = 多用户.目标
  • 运行级别 5 = 图形.目标
  • 运行级别 6 = 重新启动.目标

考虑到这一点,使用命令(例如尝试在运行级别 2、3 和 4 之间切换)似乎没有意义,systemctl set-default multi-user.target因为运行级别 2、3 和 4 与 multi-user.target 同义。

值得注意的是,该systemctl cat httpd命令可以用来查看一些配置信息。与您的问题相关,此命令将显示 HTTPD 设置为 multi-user.target。

# systemctl cat httpd
. . .
[Install]
WantedBy=multi-user.target

我不确定这是否适合您的环境。满足您的需求的一个可能的解决方案可能是使用一个脚本来确定系统的当前运行级别,然后使用一些 if 循环来根据目标启动或停止 HTTPD 守护程序。例如,也许脚本看起来有点像这样。

#!/bin/bash
target=`systemctl get-default`
if [ $target == "multi-user.target" ]
then
  systemctl stop httpd
else
  systemctl start httpd
fi

相关内容