当一切都启动并运行时,如何在启动时运行脚本?

当一切都启动并运行时,如何在启动时运行脚本?

我有一台用于路由目的的 PC,它有 2 个网络接口并运行 Debian。我想给它添加一个声音,以表明它已启动并且正常。

/etc/init.s/beep-startup所以我根据绝密创建了一些脚本LSBy化手册(无法停止对其命名的嘲笑,抱歉),其中(以及数百个 LSB 字符串)包含几个核心命令:

### BEGIN INIT INFO
# Provides:          beep-startup
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: qwer
# Description:       asdf
### END INIT INFO
case "$1" in
  start)
    #power chord + extreme uprising = fells like its clearly up and feeing good
    beep -f 220 -l 100
    beep -f 330 -l 100
    beep -f 880 -l 100
    ;;
  stop)
    # power chord + slow chirp down, feels like low descending shutdown sound, right after ctrl+alt+del or /sbin/reboot
    beep -f 440 -l 100
    beep -f 330 -l 100
    beep -f 220 -l 100
    ;;
  *)
    echo "Usage: sudo rm / -rf"
esac

然后我当然就跑chmod +xupdate-rc.d beep-startup defaults

但现在的窍门是,当我看到它在运行时,实际的蜂鸣声是在系统启动过程中发出的,而不是在弹出登录提示时发出的。因此,蜂鸣声和登录提示之间有 2-3 秒的时间。鸣叫声和正确路由开始之间大约有 5-7 秒(4 核 * 2ghz + 4gb DDR3 内存,对于路由器来说还不错)关机蜂鸣声就像一个魅力,几乎立即发生,就在 ctrl+alt+del 组合之后,因为它应该确认“关闭序列已启动”。

我希望beep它在显示登录提示之前只是抒情地“纳秒” - 例如,在并且$all#everything或者你要写什么 - 将保持精确清晰)真正完成初始化并且系统准备好显示登录提示之后。如何创建一个自动运行脚本,该脚本在系统完成所有操作后、但在显示登录提示之前立即执行?


附言。有点抱怨,但是.. 这是一个只有控制台的路由器,没有 xorg 或任何其他东西:唯一需要的用户是root,它的大部分任务都与 root 相关。系统可以“初始化”、“运行”、“关闭”、“断电”——无需运行级别。 Debian 在那种无运行级别的发行版中是真正的垃圾繁忙盒初始化从这个意义上来说,感觉非常“性感”。后来我计划摆脱笨重的 Debian,转而使用类似 buildroot 的发行版。但这只会在生产中发生:只有在我稳定下来并弄清楚我需要什么软件之后。现在我确实喜欢在开发和软件可用性测试阶段添加“运行时”包的可能性。到目前为止,我对 的体验很好,而对+iptables的体验最差,当第一个块第二个时,以及阻止 dnsmasq、切断整个 WAN 连接等。我希望能找到更多用户友好的解决方案。现在的问题是关于“在启动并运行所有内容后运行脚本”shorewallwebmin/etc/init.d

答案1

这里有很好的解决方案。解决方案 1:在 crontab 中创建一个 @reboot 条目来运行名为 /usr/local/bin/runonce 的脚本。

使用 mkdir -p 创建名为 /etc/local/runonce.d/ran 的目录结构。

创建脚本 /usr/local/bin/runonce 如下:

    #!/bin/sh
for file in /etc/local/runonce.d/*
do
    if [ ! -f "$file" ]
    then
        continue
    fi
    "$file"
    mv "$file" "/etc/local/runonce.d/ran/$file.$(date +%Y%m%dT%H%M%S)"
    logger -t runonce -p local3.info "$file"
done

现在,将您想要在下次重新启动时运行的任何脚本(仅一次)放入目录 /etc/local/runonce.d 中,并适当地 chown 和 chmod +x 。运行后,您会发现它已移动到 ran 子目录,并且日期和时间附加到其名称中。您的系统日志中还会有一个条目

感谢丹尼斯·威廉姆斯 https://serverfault.com/questions/148341/linux-schedule-command-to-run-once-after-reboot-runonce-equivalent

相关内容