systemd:如何获取正在运行的目标

systemd:如何获取正在运行的目标
  • 命令systemctl get-default返回user-defined.target
  • 然后我使用systemctl isolate multi-user.target切换到multi-user.target
  • 我可以看到一堆不应该在 上运行user-defined.taret而应该在 上运行的服务multi-user正在运行,这意味着我在 上运行multi-user.target
  • 但,systemctl get-default总会回来user-defined.target

问题是,如果不查看和分类服务,我怎么知道multi-user.target使用后正在运行isolate

答案1

在 systemd 中,一次可能存在多个活动目标。

检查所有当前活动目标的列表:

systemctl list-units --type target --state active

要快速找出特定目标(例如user-defined.target)是否处于活动状态:

systemctl is-active user-defined.target

答案2

没有 systemd 命令可以查询正在运行的目标或最后使用的目标isolate

systemd确实附带了一条命令,runlevel用于兼容旧系统。这将阻止当前的“运行级别”。这个概念已经过时了,但正如所见man runlevel,特定的运行级别映射到特定的 systemd 目标。只要使用标准目标,此命令可能很有用。如果使用了未映射到旧运行级别的自定义目标,它将毫无用处。

有关解决方法的更多讨论请参阅 [https://www.centos.org/forums/viewtopic.php?t=54347](CentOS论坛)。

答案3

与前面提到的答案类似,您可以使用:

systemctl list-units --type target | egrep "eme|res|gra|mul" | head -1

您得到的结果就是您当前的目标。

如果你安装的单元名称中包含上述四个字符串之一,则可以^在它们前面添加字符 -egrep "^eme|^res|^gra|^mul"

在阅读下面的“Eduard Rozenberg”帖子后,我决定编辑我的答案,实际上是为了提供额外的说明。我不知道 Eduard 在发布答案之前是否尝试过我的解决方案。
但是,如果您使用上面的命令,您应该会得到正确的结果。Eduard 表示他同时获得了图形和多用户目标。我们应该只在 GUI 环境中同时获得图形和多用户目标,因为 graphic.target 需要 multi-user.target。Head
成功解决这仅显示第一行(graphical.target),因为结果是按字母顺序排序的。

@Eduard Rozenberg - 如果您读过此内容,请提供反馈,看看此命令是否适合您,谢谢...

此外,我想提供有关更短的命令/输入的信息:

  • 你可以-t使用--type

答案4

不幸的是,这些答案都没有指出当前哪个运行级别处于活动状态。在我的例子中,它们都显示multi-user.targetgraphical.target都已加载/处于活动状态。到目前为止,只有runlevel命令指示当前运行级别。

runlevel | awk '{print $2}'

相关内容