获取 systemd 实际状态

获取 systemd 实际状态

我们如何知道 systemd 是否已完成系统启动?

如果系统实际上处于启动过程中,由于缺少网络连接,我不想执行 cron 作业。我通过 cron 启动的脚本会在顶部进行测试,如果启动过程未完成,它会退出,如下所示

#!/bin/sh
$STATE=`HERE ADD THE MISSING PART`
if [ $STATE != "active" ]; then
  exit
fi
# Actions to do on next cron after booting

如果它还可以向我提供有关关闭过程的信息,因为问题可能是相同的..;

我用 SystemV 做了这个运行级别命令,但 Systemd 不会在启动结束时改变运行级别。

谢谢

答案1

您可以检查脚本运行所需的活动目标。例如,为了使网络可访问,您需要检查network-online.targetsystemctl check如果选中的单元处于活动状态,则将返回 0)

systemd 尝试访问的目标是其“默认”目标,可以通过 进行查询systemctl get-default。如果该目标在线,则系统已完成启动(因此您可以发出以下命令systemctl status $(systemctl get-default)来检查启动过程是否已完成)

编辑: 如果你只想监视系统的当前状态,并且对目标不感兴趣(即你只想在以下情况下运行命令一切如果脚本已启动并正在运行(如果脚本已启动并正在运行),则最好使用该systemctl is-system-running命令。running如果一切正常,或者degraded如果系统已启动但某些服务失败(这可能表示错误,也可能不表示错误),它将输出。其他状态将表明您的脚本不应运行。附带说明一下,通常最好检查返回值而不是解析文本输出,但手册页没有指定返回值,只说除了“运行”之外的任何非零退出代码的结果,因此解析输出文本可能更安全。

请参阅手册页systemctl以了解可能的输出值。

相关内容