【问题标题】:how to check whether Linux is going down for halt or reboot如何检查 Linux 是否正在停机或重新启动
【发布时间】:2017-12-16 21:31:11
【问题描述】:

当系统停机/关机时,我需要执行一些命令。

我需要在我的脚本 /etc/init.d/myScript 中知道这一点,该脚本在系统出现故障时被调用。

我曾经通过检查 $runlevel 变量来做到这一点,如果它设置为 0,那么系统就会停止运行,例如几年前它在 Raspbian 中工作。

但是,在我的 Linux cubieboard2 4.9.12-sunxi Armbian 中,这个变量没有设置,当我在 myScript 的“STOP”案例中执行“runlevel”命令时,它说它处于 N 5 运行级别,这是不正确的,因为我已执行关机

欢迎所有提示。

【问题讨论】:

  • 我会想到两种方法:(a)使用last 命令,它可以根据选项为您提供最后一次关机或最后一次重新启动时间,或者(b)解析@987654323 @ 文件。这些都行吗?
  • 不是通过切换到运行级别 0 来停止系统,从而执行/etc/rc0.d/ 目录中的所有脚本吗?因此,即使您无法通过$runlevel(根据我的手册页,顺便说一句,应该是$RUNLEVEL)或runlevel 命令识别当前运行级别,您也可以在/etc/rc0.d/ 中放置一个符号链接到一个特殊脚本仅在系统停止时调用。
  • 如果您正在运行 systemd,您可以尝试通过“systemctl get-default”获取运行级别
  • chkconfig 显示了您的服务的哪些方面。您可能想阅读 LSB 第 20 章 refspecs.linuxfoundation.org/LSB_4.0.0/LSB-Core-generic/…

标签: linux init


【解决方案1】:

如果您遵守 LSB 标准,则不需要在脚本中处理 runlevel。 根据 LSB 规范,您可能希望标头到您的脚本。下面是一个例子 标题。

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

更多详情见LSB standard第20章

此外,您还可以控制runlevel 调用脚本的位置。也可以通过chkconfig 命令控制

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 2018-04-25
    • 2019-08-12
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2016-10-05
    • 2014-11-01
    相关资源
    最近更新 更多