我有这个脚本,/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 更方便的调试脚本的方法,因为它无论如何都会完成每次重新启动服务的工作。