Linux 启动期间编写脚本:如何测试启动何时“完成”?

Linux 启动期间编写脚本:如何测试启动何时“完成”?

我有一个在 Debian 服务器启动期间运行的脚本。它运行得太早了,但我无法控制它何时启动。我可以使用以下命令强制脚本延迟其自身运行:

sleep 60

...或者,我可以尝试这个操作几次,如下所示:

TESTRUN=0
ACTIONWORKED=0
while [ $ACTIONWORKED -eq 0 ] && [ $TESTRUN -le 5 ]; do
      # run the action i want
      # quick test if it worked
      # if yes, set ACTIONWORKED=1
      # if no, sleep 10
      # increment TESTRUN
done

有什么更好的方法来测试系统是否已准备就绪? 该脚本将在系统运行的其他时间运行,因此需要进行测试来区分“启动尚无法完成此操作”“不启动,现在运行”状态。我不希望每次运行脚本时都要等待。


编辑: 感谢您到目前为止提出的想法。如果您有其他想法,请继续提供。

对于那些询问具体细节的人,我没有询问他们这个问题,而是专门收集与一般 Linux 启动过程相关的答案。

假设“完全启动”的系统已经显示登录提示(通过控制台、X 或其他)。

答案1

实际上,实现所需目的的最佳方法是在 SysV init 中的适当位置插入对脚本的调用。我建议您编写一个调用脚本的脚本,并劝说您的系统管理员将其安装在适当的位置。

编辑:好的,我刚刚阅读了您的另一个问题,我发现您说的是当有人插入设备时异步触发的脚本。您要做的就是检查运行级别,看它是否为 2(或者如果您更改了默认运行级别,则为 2;如果您希望在单用户模式下运行,则为 1)。如果我正确阅读了 Debian FAQ,则运行级别在启动完成之前不会更改为默认级别。

答案2

我会观察初始水平。

这应该可以让你开始了。

 [[ `/sbin/runlevel | cut -d " " -f 2` == 5 ]] && echo "Ready"

高血压

答案3

在 Debian 系统上,您可以通过 /etc/rc?.d 中脚本开头的数字指定启动期间运行的顺序。因此,在该运行级别运行的第一个脚本将是 /etc/rc?.d/S01scriptname - 最后一个将是 /etc/rc?.d/S99scriptname。通过确保您的脚本是只有一个以 S99 为前缀,它将确保它最后运行。

或者,最后要做的一件事是打电话/etc/rc.local。通过从那里调用您的脚本,您可以确保它在启动过程结束时被调用。

另一个选择是测试文件 /etc/nologin- 在启动时创建,并在启动结束时删除。

话虽如此,我认为测试脚本是否有效的想法并不坏。这可以确保没有其他因素妨碍脚本正确运行。

答案4

您还可以使用@reboot作为时间,将其作为 cronjob 来运行。

相关内容