如何在 FreeBSD 中获取运行级别

如何在 FreeBSD 中获取运行级别

在 Linux 中我们可以像这样获取运行级别:

if [ "$(runlevel | sed 's/.* //')" = 6 ]; then
  echo "A reboot is in progress"
fi

运行级别 0 表示关机。我该如何对 Free BSD 执行同样的操作?

答案1

运行级别是 (SystemV 风格的 init) 特有的概念sysvinit。Linux 中使用的其他风格的 init (例如systemd) 也没有运行级别的概念。

运行级别的概念在 BSD 风格的 init 中也不存在,因此 FreeBSD 中没有运行级别。

答案2

测试存在

/var/run/nologin

文件提供相同的信息。

答案3

Mikhail 的说法是正确的,没有 Linux/SysV 风格的运行级别,但是有单用户和多用户模式。这是迂回的,但我发现最好的方法是通过编程来判断您是处于单用户还是多用户模式:

当 FreeBSD 处于单用户模式时,“adjkerntz”尚未启动(如果您退出,它也会被终止),因此您可以对此进行测试:

if ! ps -auxww | grep -v "grep" | grep "adjkerntz" > /dev/null; then
   echo "Single user";
else
   echo "Multi-user";
fi

我已经验证它可以在 9.x 和 10.x 以及可能的所有其他版本的 FreeBSD 下运行。

相关内容