排除故障,看看 /etc/init.d 脚本是否会在启动时运行,而无需实际重新启动?

排除故障,看看 /etc/init.d 脚本是否会在启动时运行,而无需实际重新启动?

我有这个脚本,/etc/init.d我想知道它是否会在系统重新启动时运行。有没有办法“模拟”重新启动的情况,以查看脚本是否会真正被调用(并对其进行调试),而无需真正重新启动系统?

请注意,我知道您可以直接运行脚本来调试它。我的观点是排除以下情况的故障:当手动运行时,脚本可以正常运行,但由于某种原因,它在系统启动/重新启动时无法运行(例如,另一个脚本的某些运行条件、具有权限的内容等)。

也许这与运行级别有关?因为我不是熟悉他们。

谢谢!

答案1

一个常见问题是环境差异。如果脚本第一行没有 bang 路径,那么 shell 差异可能是一个问题。

我遇到的最常见问题是路径预期。 init.d脚本使用精简的路径运行。

这些是 cron 脚本所具有的相同问题。我相信路径和环境是相同的,或者至少非常相似。尝试cron以 root 身份运行转储其环境的作业。类似:

echo PATH=$PATH
echo
echo ENVIRONMENT
env
echo
echo Set variables
set

然后启动一个/bin/sh会话并清除其环境以匹配 cron 作业的环境,然后再运行您的 init 作业。您应该能够编写设置脚本并将其作为/bin/sh脚本运行。

答案2

尽管这可能是一种不太好的调试方式,但您实际上可以尝试在未使用的运行级别上启用您的服务,以检查脚本在被 init 调用时的行为。

例如,通常不使用运行级别 4(尽管请检查您的系统)。然后您可以将符号链接目录 rc3.d 复制到 rc4.d(以确保级别 3 和 4 的所有服务相同)并为级别 4 启用您的服务。然后,通过运行,telinit 4您可以模拟脚本的启动。这将导致 init 切换运行级别,这几乎类似于在机器重启之前切换到重新启动运行级别时的情况。

请注意,@BillThor 的回答正确地提出了关键问题,并且可能指出了比每次拉动 init 更方便的调试脚本的方法,因为它无论如何都会完成每次重新启动服务的工作。

相关内容