运行级脚本的执行顺序

我在/etc/rc0.d中运行的0级脚本,例如停止时应该执行

  1. K05foo – > …
  2. K10bar – > …
  3. K80baz – > …
  4. S10somemore – > …
  5. S90halt – > …

这是否正确,执行顺序如上所述,即

  1. 首先所有击杀,按照优先顺序升序
  2. 然后所有开始,按优先顺序升序排列
  3. 所有这些,独立于我们切换的运行级别(S,0-6)
  4. 所有脚本总是被调用(即没有额外的检查会阻止脚本被调用,例如,在之前的运行级别脚本实际上是否启动)

我很困惑,因为在我的embedded式系统上,一些脚本似乎没有得到执行, 那个页面说

S20链接在S91和K91在K20之前被杀死之前启动。

这与我上面的文字相矛盾。

回答我自己的问题,为了完整:

我在OpenEmbedded系统上使用busybox。 /etc/init.d/rc的rc脚本具有以下行为:

  • 在目标运行级别中,所有杀死在所有启动之前执行
  • 所有脚本都按照优先级顺序执行
  • 但是:只有在之前的运行级别中没有等效的起始(即,新起点)
  • 而且,如果目标运行级别是0(暂停)或6(重新启动),则启动实际上被执行为杀死 – 即“停止”作为parameter passing。 但是毕竟杀死了,如果在之前的运行级别中存在相同的开始,那么仍然不行。

另外, shutdown now实际上是切换到运行级别1而不是运行级别0.你必须在运行级别0中使用haltpoweroff 。所以我的脚本在rc0.d中没有真正执行,只有碰巧也是在rc1.d.

这取决于你正在使用的init守护进程。

对于SysVInit,当您将运行级别更改为0时,可以假设类似于以下内容:

 rl=0 for k in /etc/rc$rl.d/K*; do $k stop done for s in /etc/rc$rl.d/S*; do $s start done 

我看不出你上面提到的那句话的矛盾。