Ordem de execução dos scripts de runlevel

5

Meus scripts de runlevel 0 em /etc/rc0.d, que devem ser executados ao parar, por exemplo

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

É correto que a ordem de execução esteja listada acima, ou seja,

  1. Primeiro todas as mortes, em ordem de prioridade crescente
  2. Então, todos os Starts, em ordem de prioridade crescente
  3. Tudo isso, independentemente do nível de execução para o qual mudamos (S, 0-6)
  4. Todos os scripts sempre são chamados (ou seja, não há verificações adicionais que impeçam que um script seja chamado, por exemplo, se no script de execução anterior esse script foi realmente iniciado)

Estou confuso porque no meu sistema incorporado alguns dos scripts parecem não ser executados, e essa página diz

S20 link is started before a S91 and and K91 is kill before K20.

que contradiz meu texto acima.

    
por Philipp 11.07.2014 / 13:03

2 respostas

2

Respondendo a minha própria pergunta, para completar:

Estou usando o busybox em um sistema OpenEmbedded. O script rc em /etc/init.d/rc tem o seguinte comportamento:

  • No nível de execução de destino, todas as mortes são executadas antes de todas as partidas
  • Todos os scripts são executados em ordem de prioridade crescente
  • Mas: As partidas só são executadas se no nível de execução anterior não houver também um início equivalente (ou seja, está começando de novo)
  • E, se o runlevel de destino for 0 (halt) ou 6 (reboot), então os starts serão realmente executados como Kills - isto é, "stop" é passado como argumento. Mas ainda depois de todas as mortes, e ainda não se uma partida equivalente existiu no runlevel anterior.

Além disso, o que me picou foi que shutdown now muda para o nível de execução 1 e não o nível de execução 0. Você tem que usar halt ou poweroff para o nível de execução 0. Então meus scripts em rc0.d não são realmente executados, somente aqueles que também estão em rc1.d.

    
por 11.07.2014 / 22:33
0

Depende do daemon de inicialização que você está usando.

Para o SysVInit, você pode assumir que algo como o seguinte acontece quando você altera o nível de execução para 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

Eu não consigo ver uma contradição da frase que você citou para as coisas que você disse acima.

    
por 11.07.2014 / 14:10